首页...继承与多态——Visual Basic面向对象程序设计核心
Visual Basic语言程序设计第九章 面向对象程序设计/第三节 继承与多态

继承与多态——Visual Basic面向对象程序设计核心

2026-03-24

第九章 面向对象程序设计

第三节 继承与多态


概述

在面向对象程序设计中,继承与多态是两个极其重要的概念,它们不仅体现了面向对象的设计思想,还极大地增强了程序的复用性和扩展性。本节内容将深入讲解Visual Basic语言中继承与多态的定义、原理及应用,帮助考生系统掌握这两个核心内容,为编写高质量的面向对象程序打下坚实基础。

学习目标:

  • 理解继承的基本概念和实现方式
  • 理解多态的含义及其在Visual Basic中的实现
  • 掌握继承与多态的典型用法和编程技巧
  • 通过实例深入理解两者的实际应用
  • 避免常见误区,提升代码设计能力

核心概念

继承(Inheritance)

继承是面向对象编程中一种机制,通过它,子类可以自动获得父类的属性和方法,从而实现代码重用和功能扩展。Visual Basic中,使用关键字Inherits来实现类的继承。

多态(Polymorphism)

多态指同一个操作作用于不同的对象,可以产生不同的解释和不同的执行结果。它使得程序具有更加灵活的扩展能力。Visual Basic支持通过**重写(Override)重载(Overload)**实现多态。

基类和派生类

  • 基类(Base Class):被继承的类,也称父类或超级类。
  • 派生类(Derived Class):继承基类的类,也称子类。

虚方法(Overridable)

在Visual Basic中,基类中声明为Overridable的方法可以在派生类中被重写,实现多态。

重写方法(Overrides)

派生类用Overrides关键字来重写基类的虚方法,实现不同的行为。


原理分析

继承的工作原理

继承通过建立类之间的层次结构,使得派生类自动获得基类的成员(字段、属性、方法等)。

  • 成员继承:子类继承基类的公共和受保护成员。
  • 访问控制:私有成员不能被子类直接访问。
  • 构造函数:子类可以调用基类的构造函数初始化基类部分。

继承机制使得代码复用成为可能,避免重复编写相同内容,同时便于维护和升级。

多态的实现原理

多态性通过方法的重写实现,基于动态绑定机制:

  • 编译时确定调用的方法签名,
  • 运行时根据对象实际类型调用对应的重写方法。

Visual Basic通过声明OverridableOverrides实现运行时多态。

多态的核心在于:

  • 父类引用指向子类对象
  • 调用虚方法时执行子类版本

这使得程序可以通过接口或基类进行操作,而具体执行细节由子类决定,提高了代码灵活性。


详细内容

1. Visual Basic中继承的语法与使用

在Visual Basic中,继承使用Inherits关键字,语法格式如下:

Public Class 派生类名
    Inherits 基类名
    ' 新增或重写成员
End Class

示例:

Public Class Animal
    Public Sub Eat()
        Console.WriteLine("动物进食")
    End Sub
End Class

Public Class Dog
    Inherits Animal
    Public Sub Bark()
        Console.WriteLine("狗叫")
    End Sub
End Class

这里,Dog继承了Animal,除了自身的Bark方法,还拥有了Eat方法。

注意事项

  • 继承是单继承,Visual Basic不支持多重继承。
  • 只能继承类,接口使用Implements关键字实现。

2. 访问权限与继承成员的可见性

访问修饰符影响继承成员的访问情况:

修饰符 说明 继承访问性
Public 公共成员,任何地方可访问 子类可访问
Protected 受保护成员,子类和本类可访问 子类可访问
Private 私有成员,仅本类内访问 子类不可访问

子类无法直接访问基类的私有成员,但可以通过公共或受保护的方法间接操作。

3. 构造函数与继承

基类构造函数不会自动被继承,但子类可以显式调用基类构造函数:

Public Class Person
    Public Sub New(name As String)
        Console.WriteLine("创建Person: " & name)
    End Sub
End Class

Public Class Student
    Inherits Person
    Public Sub New(name As String)
        MyBase.New(name)  ' 调用基类构造
        Console.WriteLine("创建Student: " & name)
    End Sub
End Class

通过MyBase.New()调用基类构造函数,保证基类部分正确初始化。

4. 多态的实现方式

多态主要通过虚方法重写方法实现。

  • 基类的方法需声明为Overridable,表示可被重写。
  • 派生类使用Overrides重写该方法。

示例:

Public Class Shape
    Public Overridable Sub Draw()
        Console.WriteLine("绘制图形")
    End Sub
End Class

Public Class Circle
    Inherits Shape
    Public Overrides Sub Draw()
        Console.WriteLine("绘制圆形")
    End Sub
End Class

Public Class Rectangle
    Inherits Shape
    Public Overrides Sub Draw()
        Console.WriteLine("绘制矩形")
    End Sub
End Class

多态调用示例:

Dim s As Shape
s = New Circle()
s.Draw()   ' 输出“绘制圆形”
s = New Rectangle()
s.Draw()   ' 输出“绘制矩形”

多态使得同一调用语句表现不同的行为,增强程序灵活性。

5. 抽象类与多态

Visual Basic通过MustInherit声明抽象类,MustOverride声明抽象方法。

抽象类不能实例化,抽象方法没有具体实现,派生类必须重写。

示例:

Public MustInherit Class Animal
    Public MustOverride Sub MakeSound()
End Class

Public Class Cat
    Inherits Animal
    Public Overrides Sub MakeSound()
        Console.WriteLine("喵喵")
    End Sub
End Class

抽象类用于设计模板,强制子类实现特定方法。


实例分析

实例一:动物类层次结构

背景:设计一个动物分类程序,支持不同动物的行为展示。

代码示例

Public Class Animal
    Public Overridable Sub Speak()
        Console.WriteLine("动物发声")
    End Sub
End Class

Public Class Dog
    Inherits Animal
    Public Overrides Sub Speak()
        Console.WriteLine("汪汪")
    End Sub
End Class

Public Class Cat
    Inherits Animal
    Public Overrides Sub Speak()
        Console.WriteLine("喵喵")
    End Sub
End Class

Sub Main()
    Dim a As Animal
    a = New Dog()
    a.Speak()  ' 输出“汪汪”
    a = New Cat()
    a.Speak()  ' 输出“喵喵”
End Sub

分析

  • 通过继承,DogCat类复用Animal的结构。
  • 利用多态,父类引用a动态绑定到子类方法,实现不同声音。

结论
继承与多态使得代码易于扩展,只需新增子类而不修改调用代码。

实例二:图形绘制程序

背景:设计一个绘图程序,支持不同几何图形的绘制。

代码示例

Public MustInherit Class Shape
    Public MustOverride Sub Draw()
End Class

Public Class Circle
    Inherits Shape
    Public Overrides Sub Draw()
        Console.WriteLine("绘制圆形")
    End Sub
End Class

Public Class Square
    Inherits Shape
    Public Overrides Sub Draw()
        Console.WriteLine("绘制正方形")
    End Sub
End Class

Sub Main()
    Dim shapes As Shape() = {New Circle(), New Square()}
    For Each s As Shape In shapes
        s.Draw()
    Next
End Sub

分析

  • 抽象父类Shape定义绘制接口,强制子类实现。
  • 多态机制使得遍历Shape数组时调用具体图形的绘制方法。

结论
使用抽象类和多态,实现了统一接口多样行为,程序结构清晰。

实例三:员工薪资计算

背景:设计一个员工管理系统,不同员工类型有不同薪资计算方法。

代码示例

Public Class Employee
    Public Overridable Function CalculateSalary() As Double
        Return 0
    End Function
End Class

Public Class Manager
    Inherits Employee
    Public Overrides Function CalculateSalary() As Double
        Return 8000
    End Function
End Class

Public Class Sales
    Inherits Employee
    Public Overrides Function CalculateSalary() As Double
        Return 5000 + 1000 ' 基本加提成
    End Function
End Class

Sub Main()
    Dim emps As Employee() = {New Manager(), New Sales()}
    For Each e As Employee In emps
        Console.WriteLine("薪资: " & e.CalculateSalary())
    Next
End Sub

分析

  • 通过基类Employee统一管理,子类实现具体薪资计算。
  • 多态调用实现不同员工薪资动态计算。

结论
继承与多态极大简化了不同员工类型的管理和扩展。


常见误区与注意事项

  1. 误区:继承可以继承基类的私有成员。

    • 正确做法:私有成员只能在基类内部访问,子类不能直接访问,应通过公共或受保护方法间接访问。
  2. 误区:所有方法默认都是可重写的。

    • 正确做法:只有声明为Overridable的方法才可被重写,否则使用NotOverridable防止重写。
  3. 误区:使用Overrides时,基类方法不必声明为Overridable

    • 正确做法:基类方法必须声明为OverridableMustOverride,否则编译错误。
  4. 误区:多态只能通过子类对象调用。

    • 正确做法:多态通过基类引用指向子类对象实现,基类引用调用虚方法时执行子类版本。
  5. 注意:构造函数不支持重写,子类必须显式调用基类构造函数。

    • 使用MyBase.New()调用基类构造函数,保证基类初始化。

应用场景

  • 图形界面开发:不同控件继承自基类控件,重写绘制和事件处理方法,实现统一管理和多态操作。

  • 游戏开发:游戏角色继承基类角色,重写行为方法,实现丰富角色动作和交互。

  • 企业管理系统:员工、客户等对象通过继承实现不同的业务逻辑处理和数据管理。

  • 设备驱动程序:基于继承设计不同设备的驱动类,实现接口统一,调用多态。

  • 数据处理框架:通过继承和多态实现不同数据格式的处理策略,统一接口调用。


知识拓展

  • 接口(Interface)与继承的区别

    • 接口定义规范,类实现接口,支持多继承。
    • 继承实现代码复用和行为扩展。
  • 多态的静态多态与动态多态

    • 静态多态通过方法重载实现。
    • 动态多态通过虚方法实现。
  • 设计模式中的继承与多态

    • 如工厂模式、策略模式大量使用继承和多态实现灵活扩展。
  • Visual Basic中的Shadows关键字

    • 用于隐藏基类成员,与重写不同,调用方法时绑定静态。
  • 内存模型与继承

    • 继承关系影响对象内存布局和方法调用机制。

总结回顾

本节重点围绕Visual Basic中的继承与多态展开,系统讲解了:

  • 继承定义及其语法,强调单继承特性和成员访问控制。
  • 多态的原理及通过OverridableOverrides实现动态绑定。
  • 详细分析了构造函数在继承中的作用和调用方式。
  • 通过典型实例展示继承与多态在实际开发中的应用。
  • 总结了常见误区,帮助考生避免编程错误。
  • 指出多种应用场景,激发学习兴趣和实践思考。

通过本节学习,考生应掌握继承与多态的核心机制,能够设计并实现具有良好扩展性的面向对象程序,为全国计算机等级考试二级Visual Basic语言程序设计部分奠定坚实基础。


祝学习顺利!

重点知识点

1

继承是面向对象编程中实现代码复用和功能扩展的机制,Visual Basic使用Inherits关键字实现继承

2

多态是同一操作在不同对象上表现出不同行为的能力,通过Overridable和Overrides关键字实现动态绑定

3

基类的私有成员不能被派生类直接访问,访问权限影响继承成员的可见性

4

构造函数不被继承,派生类通过MyBase调用基类构造函数完成初始化

5

抽象类使用MustInherit修饰,抽象方法使用MustOverride,派生类必须重写抽象方法

6

多态的核心是基类引用指向子类对象,运行时动态调用子类重写的方法

7

常见误区包括误认为所有方法默认可重写、继承私有成员、多态只能通过子类对象调用等

8

多态和继承广泛应用于图形界面开发、游戏开发、企业管理系统等实际场景

9

接口与继承的区别、静态多态与动态多态概念及设计模式中的应用是知识拓展的重要内容