“类继承概念我学过在VB.NET中是如何来实际演练呢?”我还是坚持着问
“我写段代码给你看下吧俗话不是说百闻不如见吗?”大李调侃了两句噼噼啪啪地开始敲打起键盘来:
Public Class CBaseHenry
Private x As Integer = 10
Protected y As Integer
Sub New
Console.WriteLine("基类构造")
End Sub
Protected Overrides Sub Finalize
Console.WriteLine("基类析构")
MyBase.Finalize
End Sub
Public Overridable Function GetY(ByVal x As Integer) As Integer
Me.y = me.x + x ‘private类型me.x只能在基类中使用
Console.WriteLine("基类GetY思路方法结果为:" & Me.y)
Return Me.y
End Function
Public Sub OldY
Console.WriteLine("基类OldY思路方法")
End Sub
End Class
“你看这是个基类我再给你写个继承自该类派生类”他边说边继续写:
Public Class CDerivedHenry
Inherits CBaseHenry
Sub New
MyBase.New ‘注意:这句话要放在sub内第句
Console.WriteLine("派生类构造")
End Sub
Protected Overrides Sub Finalize
Console.WriteLine("派生类析构")
MyBase.Finalize
End Sub
Public Overrides Function GetY(ByVal x As Integer) As Integer
Me.y = x * 10 ‘protected类型me.y却可以在派生类中使用
Console.WriteLine("派生类GetY思路方法结果为:" & Me.y)
Return Me.y
End Function
Public Sub NewY
Console.WriteLine("派生类新思路方法")
End Sub
End Class
“你看清了吧我们通过声明Inherits关键字来标识该类基类是谁如果没有标识类比如CBaseHenryVB.Net就会视其为派生自Object基类这是种隐式继承和结构是隐式继承自ValueType 类方式是样”大李指着屏幕跟我解说着
“那这些overrides和overload标识是什么意思呀?”我隐隐感觉到它们意义却没法清楚地说出来
“我们使用继承也要允许派生类中某些属性或思路方法有和基类区别行为我们想‘重写’它但基类也得要同意你才能重写呀否则不就会发生命名冲突了吗?派生类对象是可以使用基类公用成员那如何知道哪些基类思路方法和属性是被派生类重写了呢?所以就必须有个约定:我们在基类中用Overridable修饰符来标识允许基类中属性或思路方法在其派生类中被重写没有标识其实就是默认为有NotOverridable修饰符来隐式地标识用于提醒编译器该属性或思路方法不可被重写;然后在派生类重写时我们就用Overrides修饰符来标识哪些是重写自基类中定义 Overridable 属性或思路方法”大李娓娓道来“我们来演练下对派生类操作吧”
Public Sub Main
Dim obj As CDerivedHenry = New CDerivedHenry
obj.GetY(4) '派生类GetY思路方法
obj.OldY '基类oldY思路方法
obj.NewY '派生类NewY思路方法
End Sub
然后大李按了下F5键在“输出”窗口中就出现了如下运行结果:
基类构造 ‘开始运行New CDerivedHenry
派生类构造
派生类GetY思路方法结果为:40 ‘obj.GetY(4)运行结果=4*10不等于基类(4+10)
基类OldY思路方法 ‘obj.OldY运行结果
派生类新思路方法 ‘obj.NewY运行结果
派生类析构
基类析构
“你看你只在Main中例子化了个派生类对象为什么先会出现‘基类构造’?”大李问
“这个么”我开始在代码中查看起来“是这句了”我手指着派生类里这段代码:
Sub New
MyBase.New ‘注意:这句话要放在sub内第句
Console.WriteLine("派生类构造")
End Sub
“没错我们必须要注意这点就是派生类构造和析构都必须重新编写New 构造般用于打开文件、连接到数据库、化变量以及处理任何需要在可使用对象前完成其他任务我们必须在Sub New 构造中第行代码使用语句 MyBase.New来类层次结构中该类基类构造以获得基类性质析构则是在Sub Finalize中执行完对派生类清理任务如保存状态信息、关闭文件和和数据库连接以及执行在释放对象前必须完成其他任务的后在析构最后句使用语句 MyBase.Finalize 显式其基类 Sub Finalize 思路方法以析构MyBase.New构造内容所以你从运行结果中也可以很清楚看出这顺序”大李敲击着屏幕象是给我提个醒
“明白了我会记着”我诚恳地点头回应着
大李突然想起了什么抬头对我说:“讲到类继承我们还得看下重载和隐藏问题”
最新评论