MST
星途 面试题库

面试题:Visual Basic继承体系下的多态性复杂应用

假设有一个`Shape`基类,包含`CalculateArea`方法用于计算图形面积。从`Shape`类派生出`Circle`(圆形)和`Rectangle`(矩形)类。在`Circle`类中,根据半径计算面积;在`Rectangle`类中,根据长和宽计算面积。现在创建一个`List(Of Shape)`,向其中添加若干`Circle`和`Rectangle`对象,并编写代码遍历该列表,调用`CalculateArea`方法计算并输出每个图形的面积。请详细阐述实现思路并编写代码。
24.6万 热度难度
编程语言Visual Basic

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义Shape基类,包含CalculateArea抽象方法。
  2. Shape类派生出Circle类和Rectangle类,在这两个子类中分别实现CalculateArea方法,按照各自的计算逻辑计算面积。
  3. 创建一个List(Of Shape)集合,向其中添加CircleRectangle对象。
  4. 遍历该集合,调用每个对象的CalculateArea方法并输出结果。

代码实现(以Visual Basic.NET为例)

' 定义Shape基类
Public MustInherit Class Shape
    Public MustOverride Function CalculateArea() As Double
End Class

' 定义Circle类继承自Shape
Public Class Circle
    Inherits Shape
    Private _radius As Double
    Public Sub New(ByVal radius As Double)
        _radius = radius
    End Sub
    Public Overrides Function CalculateArea() As Double
        Return Math.PI * _radius * _radius
    End Function
End Class

' 定义Rectangle类继承自Shape
Public Class Rectangle
    Inherits Shape
    Private _length As Double
    Private _width As Double
    Public Sub New(ByVal length As Double, ByVal width As Double)
        _length = length
        _width = width
    End Sub
    Public Overrides Function CalculateArea() As Double
        Return _length * _width
    End Function
End Class

' 主程序
Module Program
    Sub Main()
        Dim shapes As New List(Of Shape)()
        shapes.Add(New Circle(5))
        shapes.Add(New Rectangle(4, 6))

        For Each shape In shapes
            Console.WriteLine($"面积为: {shape.CalculateArea()}")
        Next
    End Sub
End Module

代码说明

  1. Shape基类定义了抽象方法CalculateArea,要求子类必须实现。
  2. Circle类实现了CalculateArea方法,使用圆的面积公式πr²计算面积。
  3. Rectangle类实现了CalculateArea方法,使用矩形面积公式长×宽计算面积。
  4. Main方法中,创建了List(Of Shape)集合,并添加了CircleRectangle对象,然后遍历该集合并输出每个图形的面积。