转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB.Net中文教程(4) 类别继承(Inheritance)关系         ★★★★

VB.Net中文教程(4) 类别继承(Inheritance)关系

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3659 更新时间:2009/4/23 19:01:08

请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
              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 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之子类别。

''''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
        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 Teacher
    Inherits Person
   
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 steven As Teacher
        steven = New Teacher()
        steven.SetValue("Steven", 35)
        steven.Display()
    End Sub
End Class

此程序输出如下﹕
                  Name: Steven     Age: 35

    表面上Teacher 类别中﹐未定义数据项及程序﹐但事实上已拥有name及 age两个资料成员﹐也拥有 SetValue()、birthYear()及Display() 三个程序成员。因之﹐steven为Teacher类别之对象﹐它能呼叫SetValue()及Display()程序。在应用上﹐子类别通常拥有自己的数据项及程序﹐使其有别于父类别。例如﹕

''''ex03.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
        age = a
    End Sub
    Public Function birthYear() As Integer
        birthYear = 2001 - age
    End Function
  &n

[1] [2] [3] [4] [5] [6]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台