面向对象编程继承接口与多态.ppt

上传人:本田雅阁 文档编号:2612983 上传时间:2019-04-19 格式:PPT 页数:41 大小:975.51KB
返回 下载 相关 举报
面向对象编程继承接口与多态.ppt_第1页
第1页 / 共41页
面向对象编程继承接口与多态.ppt_第2页
第2页 / 共41页
面向对象编程继承接口与多态.ppt_第3页
第3页 / 共41页
面向对象编程继承接口与多态.ppt_第4页
第4页 / 共41页
面向对象编程继承接口与多态.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《面向对象编程继承接口与多态.ppt》由会员分享,可在线阅读,更多相关《面向对象编程继承接口与多态.ppt(41页珍藏版)》请在三一文库上搜索。

1、第第8 8章章 面向对象编程:继承、面向对象编程:继承、 接口与多态接口与多态 继承和多态是继承机制中十分重要的概念。继承是基于现有类创建一个 新类的技术。其中,现有类称为基类或父类,创建的新类称为派生类或 子类。派生类继承基类中所有的数据和操作,同时还可以添加需要的额 外的数据和操作。通过继承,不仅可以重用基类的代码,还可以通过定 义继承类的层次结构来反映业务实体之间的相互关系。 在派生类中还可以重新定义基类中的成员,以及定义多个同名但功能不 同的成员,这就是多态性。多态反映了继承的另外一个特性,即通过新 类扩展现有类,在扩展时无需更改现有类的任何代码。利用多态性,可 以根据未来的业务变化和

2、需求,无缝扩展现有的类。 本章将讲述类的继承、接口以及多态的相关知识。 章节内容章节内容 8.1 继承 8.2 接口 8.3 多态性 8.4 使用Me、MyBase和MyClass关键字 8.5 可视化继承 8.1 8.1 继承继承 通过继承,可以直接基于系统中现有的 类创建新类。 现有的类称为基类,也可以称为父类、 超类。 新创建的类称为派生类,也可以称为子 类。 派生类继承了基类中的所有属性、方法 、事件,并且可以对基类进行扩展。 例如例如,设计一个描述教师的类。设计一个描述教师的类。 8.1.1 8.1.1 创建派生类创建派生类 VB.NET中使用Inherits语句来创建派生 类,该语

3、句使得当前类继承指定类的所 有非私有成员,其基本语法格式如下。 Class 派生类名 Inherits 基类名 类成员 End Class 示例示例:创建创建TeacherTeacher基类及其基类及其 ProfessorProfessor派生类派生类 Step1:新建一个Windows Form应用程 序工程,命名为“ProfessorClass”。 Step2:单击菜单栏中的【项目】【 添加类】命令,建立一个名为Teacher 的类,作为基类。 下面代码创建了基类Teacher。 1 Public Class Teacher 2 Private teaName As String 3 Pr

4、ivate teaBirthDate As Date 4 Private teaNative As String 5 6 Public Property Name( ) As String 7 Get 8 Return teaName 9 End Get 10 Set(ByVal value As String) 11 teaName = value 12 End Set 13 End Property 14 15 Public Property BirthDate( ) As Date 16 Get 17 Return teaBirthDate 18 End Get 19 Set(ByVal

5、 value As Date) 20 teaBirthDate = value 21 End Set 22 End Property 23 24 Public Property Native( ) As String 25 Get 26 Return teaNative 27 End Get 28 Set(ByVal value As String) 29 teaNative = value 30 End Set 31 End Property 32 End Class Step3:创建Teacher类的派生类 Professor。可以单击菜单栏中的【项 目】【添加类】命令来添加一个类, 也可

6、以将该类与Teacher类放在同一个 文件中。 1 Class Professor 2 Inherits Teacher 3 Private proDate As Date 4 Private proSalary As Double 5 6 Public Property EngageDate( ) As Date 7 Get 8 Return proDate 9 End Get 10 Set(ByVal value As Date) 11 proDate = value 12 End Set 13 End Property 14 15 Public Property Salary( ) As

7、 Double 16 Get 17 Return proSalary 18 End Get 19 Set(ByVal value As Double) 20 proSalary = value 21 End Set 22 End Property 23 End Class 8.1.2 8.1.2 继承控制继承控制 VB.NET还提供NotInheritable和 MustInherite修饰符对继承进行控制。 NotInheritable修饰符表示该类不允许被继 承,即指定该类不能作为基类。不能被继承 的类有时也称为密封类 MustInherite修饰符表示该类必须被继承, 即必须作为基类而不

8、能用于创建实例,必须 作为基类的类有时也被称为抽象类。 8.2 8.2 接口接口 接口与类很相似,也定义了一系列属性 、方法和事件。但与类不同的是,接口 并不提供实现。它们由类来实现,并从 类中被定义为单独的实体。 接口在面向对象设计中发挥着非常重要 的作用,我们可以使用接口来表示一种 约定,实现接口的类必须严格按其定义 来实现接口的每个方面。 何时使用接口?何时使用接口? 在应用程序要求很多可能不相关的对象 类型以提供某种功能的情况下,接口的 适用性更强。 接口比类更灵活,因为可以定义单个实 现来实现多个接口。 在无需从基类继承实现的情况下,接口 更好。 在无法使用类继承的情况下接口是很有

9、用的。例如,结构无法从类继承,但它 们可以实现接口。 8.2.2 8.2.2 定义接口定义接口 VB.NET允许使用Interface语句来定义 接口,其基本语法格式如下。 修饰符Interface接口名 Property成员名 Function成员名 Sub成员名 Event成员名 Interface成员名 Class成员名 Structure成员名 End Interface 下面的代码定义了一个接口 IConnectable。 1 Interface IConnectable 2 Function Connect( )As Boolean 3 Sub Disconnect( ) 4 En

10、d Interface 8.2.3 8.2.3 接口继承接口继承 接口可以继承其他接口,因此可以使用接口 来定义层次结构表示实体之间的相互关系。 下面的代码定义了ITimedConnectable接口, 通过引入连接超时的概念扩展了 IConnectable接口。 1 Interface ITimedConnectable 2 Inherits IConnectable 3 Sub TimeOut(ByVal millisecs As Long) 4 End Interface 8.2.4 8.2.4 实现接口实现接口 类和结构都可以用于实现接口,甚至还可以 实现多个接口。使用Implemen

11、ts语句实现接 口的类或结构的语法格式如下。 Class(或Structure)类名(或结构名) Implements 接口1 Implements 接口n 具体实现代码 End Class(或End Structure) 在类或者结构内部实现接口中的成员时 也需要使用Implements语句,指明要实 现的接口成员。 接口成员的规范由接口名称(必须在类 或结构名称后的implements语句中指定 )、点号和要实现的成员函数、属性或 事件的名称组成。 下面代码显示了如何声明一个名为Sub1 的用于实现接口方法的子例程。 1 Class Class1 2 Implements interfac

12、eclass.interface2 3 4 Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1 5 End Sub 6 End Class 8.3 8.3 多态性多态性 多态就是对象随着程序执行而使其形式发生 改变的能力。派生类在继承基类时,会得到 基类所有的属性,字段和方法。但有时派生 类中定义的特有属性和方法往往与基类中继 承得到的属性和方法同名。 VB.NET允许在子类中使用与基类的属性或方 法同名的属性及方法,即允许在一个类中, 相同名字的属性或方法能够通过不同的代码 ,完成不同的功能,这样就实现

13、了类的多态 性。 8.3.1 8.3.1 重写重写 要在派生类中使用与基类类属性或方法 同名但功能不同的属性或方法,一个简 单的方法是把原来基类中定义的属性或 方法覆盖,换成派生类的相关代码,这 称为重写。 具体做法是,基类中允许重写的属性和 方法使用关键字Overridable声明,而 在派生类中使用关键字Overrides定义 重写的属性及方法。 下面代码中,Manager类重写了其基类Employee类中 的CalSalary方法。 1 Class Employee 2 Public Overridable Function CalSalary( ByVal HoursWorked As

14、 Decimal, _ 3 ByVal PayRate As Decimal) As Decimal 4 Return HoursWorked * PayRate 5 End Function 6 End Class 7 8 Class Manager 9 Inherits Employee 10 Private BonusRate As Decimal = 1.5 11 Public Overrides Function CalSalary( ByVal HoursWorked As Decimal, _ 12 ByVal PayRate As Decimal) As Decimal 13

15、Return HoursWorked * PayRate * BonusRate 14 End Function 15 End Class 8.3.2 8.3.2 重载重载 重写的成员要求与基类成员具有相同的 参数,因此在某些情况下,如需要使用 不同类型或者不同个数的参数完成类似 的功能,重写就不适用了。 这个时候,就要用到重载。重载是在一 个类中用相同的名称但是不同的参数类 型创建一个以上的过程、实例构造函数 或属性。重载的方法使用相同的名字, 但使用不同的参数。 例如,定义类DispalayData用于显示不同类型的 数据,可以定义多个重载的Display方法。 1 Class Displ

16、ayData 2 Overloads Sub Display(ByVal theChar As Char) 3 End Sub 4 5 Overloads Sub Display(ByVal theInteger As Integer) 6 End Sub 7 8 Overloads Sub Display(ByVal theDouble As Double) 9 End Sub 10 End Class 使用重载方法需要注意以下几点使用重载方法需要注意以下几点 重载成员必须具有不同的特征,下面的 项不能用作区分特征。 应用于成员或成员参数的修饰符,如ByVal或 ByRef。 参数名。 过程

17、的返回类型。 重载时关键字Overloads是可选的,但 如果任一重载成员使用了该Overloads 关键字,则其他所有同名重载成员也必 须指定该关键字。 8.4 8.4 使用使用MeMe、MyBaseMyBase和和MyClassMyClass 关键字关键字 Me关键字提供了一种引用当前正在其中 执行代码的类或结构的特定实例的方法 。Me的行为类似于引用当前实例的对象 变量或结构变量。 在向另一个类、结构或模块中的过程传 递关于某个类或结构的当前执行实例的 信息时,使用Me尤其有用。 MyBase关键字的行为类似于这样的对象 变量:它引用类的当前实例的基类。 MyBase通常用于访问在派生类

18、中被重写 或隐藏的基类成员。例如,MyBase.New 用于从派生类构造函数中显式调用基类 构造函数。 MyBase关键字用于在派生类中调用基类 的非私有成员,尤其是在需要使用基类 中被派生类隐藏了的方法时MyBase关键 字十分有用。 MyClass关键字的行为类似于这样的对 象变量:它引用最初实现的类的当前实 例。 MyClass类似于Me,但在调用MyClass中 的每个方法和属性时,可将此方法或属 性当作NotOverridable中的方法或属性 对待。因此,方法或属性不受派生类中 重写的影响。 8.5 8.5 可视化继承可视化继承 可视化继承是VB.NET提供的新的继承方 式,一般指

19、的是对窗体的继承。 在VB.NET中,窗体本身就是一个类,如果 要实现窗体继承,可以通过生成一个基类 窗体,然后使用Inherits语句就可以在新 窗体中实现对基类窗体的继承。 这个过程也可以通过可视化编译环境来实 现。 例子例子 Step1:新建一个Windows Form窗体应 用程序,命名为“BaseForm”。 Step2:设计窗体。 Step3:鼠标双击Button控件,编写其 Click事件过程。 1 Public Class BaseForm 2 3 Private Sub btnProtected_Click(ByVal sender As System.Object, ByV

20、al e As System.EventArgs) Handles btnProtected.Click 4 MsgBox(“Protected的按钮“) 5 End Sub 6 7 Private Sub btnPrivate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrivate.Click 8 MsgBox(“Private的按钮“) 9 End Sub 10 End Class Step4:将应用程序类型修改为类库。 在【解决方案资源管理器】窗口中双击 【My Projec

21、t】或者右击【BaseForm】 项目名称,在打开的右键菜单中单击【 属性】,打开项目属性设置窗口,并将 应用程序类型修改为类库。 Step5:单击菜单栏中的【生成】【 生成BaseForm】命令,在binRelease 文件夹下,会生成BaseForm.dll文件。 至此,基类窗体的设计就完成了。 下面通过集成环境来创建一个派生的窗 体。 Step6:单击菜单栏中的【文件】【 添加】【新建项目】命令,添加一个 新建的Windows Form窗体应用程序工程 ,并命名为“InheritanceForm”。 Step7:单击菜单栏中的【项目】【 添加类】命令,打开【添加新项- Inheritan

22、ceForm】窗口,在该窗口的 【模板】列表框中选择【继承的窗体】 ,并在【名称】文本框中输入 “InheritanceForm”。 Step8:单击【添加】按钮后,在随后 打开的【继承选择器】窗口中,选择要 继承的窗体。 此时,窗体界面如下。 Step9:双击派生窗体上的【保护】按 钮,编写其Click事件过程。 1 Public Class InheritanceForm 2 Private Sub btnProtected_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProtected.Click 3 MsgBox(“派生的保护按钮“) 4 End Sub 5 End Class Step10:右击【解决方案资源管理器】 窗口中的【InheritanceForm】项目, 在打开的右键菜单中单击【设为启动项 目】。双击【My Project】,在打开的 项目属性设置窗口中的【启动窗体】下 拉列表框中选择【InheritanceForm】 。 运行结果运行结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1