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 Class
step 2. 定义衍生类别(子类别)。如﹕
Class Teacher Inherits Person ‥‥ End Class Class Student Inherits Person ‥‥ End Class
Inherits字眼之后为父类别名称。它表达了: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之子类别。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页
|