相信大家对“重写”和“重载”这两个词都很耳熟,不过一字之差,却常常把人们弄得迷迷糊糊,其实它们就是
多态的两种表现形式。现在我们以 VB.NET 语言来说明两者的区别。
下面通过例子来认识它们的作用。
重写:
本例中我们声明了三个类,分别代表三种对象:人,父亲,儿子。儿子继承自父亲,父亲又继承自人。
解析:
[html] view plaincopy
- Public MustInheritClass People
- Public MustOverride Sub Eat(ByVal FoodName As String, ByVal num As Integer)
- End Class
[html] view plaincopy
- Public Class Father: Inherits People
- Public Overrides Sub Eat(ByVal FoodName As String, ByVal num As Integer)
- Console.WriteLine("父亲吃{0},他可以吃{1}碗!", FoodName, num)
- End Sub
- 声明一个可被重写的函数,用 OverrRidable 关键字
- Public Overridable Function GetMyName() As String
- Return "父亲"
- End Function
- Public Overridable Sub ShowMyFatherClass()
- Console.WriteLine("我的父类是 People")
- End Sub
- End Class
[html] view plaincopy
- Public Class Son :Inherits Father
- Public Overrides Sub Eat(ByVal FoodName As String, ByVal num As Integer)
- Console.WriteLine("孩子吃{0},他能吃{1}碗!", FoodName, num)
- End Sub
- Public Overrides Function GetMyName() As String
- '如果要使用父类的实现过程,则使用 MyBase 关键字
- 'Return MyBase.GetMyName()
- Return "孩子"
- End Function
[html] view plaincopy
- E<span style="font-size:18px;">nd Class</span>
这里有一点要注意:如果一个方法被声明为 NotOverRidable,那么它也同时必须被声明为 OverRide
[html] view plaincopy
- Public NotOverridable Overrides Sub ShowMyFatherClass()
- Console.WriteLine("我的父类是 Father")
- End Sub
重载:
在 VB.NET 中,重载用到的关键是OverLoads。请看如下代码:
这里需要说明几点:
1. 对于在同一类当中,一组名称相同的方法或函数重载时,可以加关键字 OverLoads 或者不加。但如果其中有一个方法加上,那同组其它方法也必须加该关键字。
2. 如果两个同名函数仅返回类型不相同,则它们不能重载,即必须在参数上有所不同。
联系客服