重载跟重写,名字很相近,结构看起来也有几分神似,但是它们各自的特点还是很鲜明的,不过总有人经常分不清它们两个。下面我用我粗浅的理解说说他们两个,希望能够帮助大家理解它们各自的特点。
重载:
在VB.Net里面重载的关键字为Overloads,看看下面的代码:
Public Class Student '声明一个方法 Public Overloads Function GetStuInfo(ByVal Name As String) As String Console.WriteLine(Name) Return Nothing End Function '重载之前声明的方法,增加了一个参数 Public Overloads Function GetStuInfo(ByVal Name As String,ByVal StuID As String) As String Console.WriteLine(Name,StuID) Return Nothing End Function '第二次重载,增加了一个参数,而且类型也与之前的不同 Public Overloads Function GetStuInfo(ByVal Name As String,ByVal Stuid As String,ByVal Age As Integer) As String Console.WriteLine(Name,Stuid,Age) Return True End Function End Class
有一点需要注意:在一个类里重载时,可以省去关键字Overloads,但是前提要保持一致,就是说若省则全省,加则全加。可以简单概括为“有福同享有难同当”。
总结:
4、如果两个同名函数仅返回类型不相同,则它们不能重载。
重写:
下面是一个小例子:
'声明一个必须被继承的抽象类 Public MustInherit Class People Public MustOverride Function GetName() As String End Class '声明一个类并继承People, Public Class Father : Inherits People '重写People中的方法 Public Overrides Function GetName() As String Console.WriteLine("我的父类是People") Return True End Function '重新声明一个方法,用来在子类中使用NotOverridable Public Overridable Function ShowMe() As String Return "父亲" End Function End Class '继承Father并重写其方法 Public Class Son : Inherits Father '重写Father中的方法 Public Overrides Function GetName() As String Console.WriteLine("我的父类是Father") Return True End Function '声明一个不可以在Son子类中重写的方法,要声明一个NotOverridable的方法,那么此方法必须同时也声明为Overrides类型 Public NotOverridable Overrides Function ShowMe() As String Return "儿子" End Function End Class
总结:
1、必须是子类与父类之间。
2、方法名、返回值类型、参数个数和参数类型都必须相同。
3、子类类重写的方法的访问权限不能低于基类的权限(public>protected>default>private)。