VB.Net中文教程(4) 类别继承(Inheritance)关系
请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
MISOO对象技术顾问团队、对象导向杂志作者、等。
u本文件摘自 对象导向杂志、精通对象观念与技术等书籍著作。
u本文件仅供您的参阅,请遵守著作权法,不得做其它商业用途。
主题: 类别继承(Inheritance)关系
?????????? 内容 ??????????
v 1. 定类别之继承
v 2. 定义继承关系
v 3. 藉「继承」扩充程序
1. 类别之继承类别之间﹐有些互为独立﹐有些具有密切关系。兹介绍类别间常见的关系──「父子」关系﹔由于儿女常继承父母之生理或心理特征﹐所以又称此关系为「继承」(Inheritance) 关系。类别间之密切关系﹐把相关的类别组织起来﹐并且组织程序内之对象。若程序内之对象毫无组织﹔呈现一片散沙﹐就不是好程序。完美之VB程序﹐必须重视类别间之关系﹐对象是有组织的。
如果 A类别「继承」 B类别﹐则称 A为「子类别」(Subclass)﹐也称B 为「父类别」(Superclass)﹐亦即 B为 A之父类别﹐A 为 B之子类别。在 C++中﹐父类别又称为「基础类别」(Base Class)﹐子类别又称为「衍生类别」(Derived Class) 。也许您觉得「继承」之观念很陌生﹐不知如何看出类别间之继承关系。别担心﹐有个简单方法﹕下列两叙述之意义相同──
(1) A 为 B之子类别。
(2) A 为 B之一种(A kind of) 特殊类别。根据叙述 (2)能轻易找到父子关系。例如﹕肯尼士(Kennex)生产高品质球拍﹐球拍分两种﹕网球拍与羽球拍。从此句子得知﹕网球拍为一种(A kind of) 球拍﹐羽球拍亦为一种球拍。因之﹐网球拍为球拍之子类别﹐羽球拍亦为球拍之子类别﹐亦即球拍是父类别。以下图标之﹕
图1、 基础类别与衍生类别如果设计程序来记录球拍之生产情形﹐则程序应定义基础类别──球拍﹐以及两衍生类别──网球拍及羽球拍。程序应藉继承关系将三类别组织起来。除了物品(如球拍、汽车等)外﹐人也有继承关系。例如﹕学校人员包括学生、老师及职员﹐老师又分为专任老师及兼任老师。学校的人事软件系统﹐应定义类别关系如下﹕
图2、 三代继承关系程序不仅要定义类别﹐也要定义其继承关系。
2. 定义继承关系
前面各章里﹐已介绍如何定义类别﹔本节将告诉您如何定义类
别之继承关系。兹举例说明之﹕
程序的设计过程是﹕
step 1. 定义基础类别(父类别)。如﹕Class Person
‥‥
End Classstep 2. 定义衍生类别(子类别)。如﹕
Class Teacher
Inherits Person
‥‥
End Class
Class Student
Inherits Person
‥‥
End ClassInherits字眼之后为父类别名称。它表达了:Teacher 为Person之子类别﹐且 Student为Person之子类别。现在﹐已知道如何表达继承关系了﹔然而﹐子类别从父类别继承什么东西呢﹖类别包含「资料」及「程序」。因之﹐子类别继承父类别之资料及程序。现在﹐请看看如何继承资料及程序。下述程序定义 Person 类别﹐含有 2项资料及 3个程序﹕
ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
-----------------------------------------------------------------------------------------
Class Person
Private name As String
Private age As Integer
Public Sub SetValue(ByVal na As String, ByVal a As Integer)
name = na
age = a
End Sub
Public Function birthYear() As Integer
birthYear = 2001 - age
End Function
Public Sub Display()
Messagebox.Show("Name: " + name + " Age: " + str(age))
End Sub
End Class
-----------------------------------------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form
Public Sub New()
MyBase.New()
Form1 = Me
This call is required by the Win Form Designer.
InitializeComponent()
TODO: Add any initialization after the InitializeComponent() call
End Sub
Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
.......
#End Region
Protected Sub Form1_Click( ByVal sender As Object, ByVal
e As System.EventArgs)
Dim mike As Person
mike = New Person()
mike.SetValue("Mike", 45)
mike.Display()
Messagebox.Show("BirthYear: " + Str(mike.birthYear()))
End Sub
End Class此程序输出如下﹕
Name: Mike Age: 45
BirthYear: 1956
所谓继承资料﹐表示继承资料成员之定义﹐而不是继承资料之值﹐请详加区别之。类别定义资料成员(含型态及名称)﹐对象诞生后﹐对象内才有资料值。所以「类别继承」乃继承类别之定义﹐不是继承对象之值。也就是说﹕若父类别定义name及 age两个资料成员﹐则子类别天生就拥有此两个资料成员﹐所以子类别不需定义它们。所谓继承程序﹐表示子类别天生就拥有父类别定义之程序成员。例如﹕Person的子类别天生就具有 SetValue()、birthYear()及Display()程序。现在﹐就来定义Person之子类别。ex02.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
-----------------------------------------------------------------------------------------
Public Class Person
Private name As String
Private age As Integer
Public Sub SetValue(ByVal na As String, ByVal a As Integer)
name = na
ag
补充:软件开发 , Vb ,