继承实例2
这个例子进一步的说明了继承。
1. 单击File,单击New,单击Project 打开新的Project 窗口。
2. 在Project Types栏里,单击Visual Basic Projects,在Templates 栏里,单击Empty Project.
3. 单击OK。
4. 在工程中增加一个新的类:在Project菜单,单击Add Class。
5. 在Name栏里,输入A.vb。
6. 单击Open。一个空的Class出现。
7. 将以下代码添加到Class A之上:
Imports System Imports System.Console |
8. 增加以下代码完成class A:
Class A Public Overridable Sub F() Console.WriteLine("A.F") End Sub End Class |
9. 在Class A之下增加以下代码:
Class B Inherits A Public Overrides Sub F() Console.WriteLine("B.F") End Sub End Class Class C Inherits B Public Shadows Overridable Sub F() Console.WriteLine("C.F") End Sub End Class
Class D Inherits C Public Overrides Sub F() Console.WriteLine("D.F") End Sub End Class |
在以下的代码段,你声明了四个对象,并且调用他们的方法看结果:
Class Test Shared Sub Main() Dim d As New D() Dim a As A = d Dim b As B = d Dim c As C = d a.F() b.F() c.F() d.F() End Sub End Class |
10. 按 F5 执行应用程序。Output出现,结果如图3所示:
 图三. 继承实例2的输出结果 |
注意 在class A 中有一个可以被override方法。在class B 有一个override方法。Class A 和class B 和前一个实例非常相似。Class B 继承class A 并且Override了方法F,另外改变了方法 F。 a.F() 和b.F() 都调用B.F,因为class A方法 F 已经被class B 的方法 F Override。
在class C 中,方法F被声明为既是一个可以被override方法也是一个shadow 方法。这意味着 这个方法在编译时屏蔽了基类的方法 F,同时它可以被class C的子类Override。Class D 继承class C。class D 中有一个override 方法,它改变了class C 方法 F在运行时的执行。这就是c.F() 和d.F() 都调用 D.F的原因。
因为方法可以屏蔽(Shadow)被继承的方法, 所以在一个类中可以包含多个具有相同的signature(即函数名,参数和返回值相同)的overridable 方法而不会引起歧义。因为除了那个被直接继承的基类方法外,其他所有的基类的方法都被隐藏而不可访问,从而没有名字冲突。
如果要调用shadowed overridable 方法,我们可以把类D的实例转为其基类(在本例中A和B)的实例来调用它。
结语 当你不看工程文件时,关闭所有的窗口。