0

这是我的沙坑:

Sub Main()

    Dim myCar As Car
    myCar = New sportsCar 

    myCar.numDoors = 4
    myCar.weight = 100  '<<errors here

End Sub

Class Car

    Public numDoors As Integer

End Class
Class sportsCar
    Inherits Car

    Public weight As Integer

End Class

最初我将 myCar 指向超类Car,然后使用多态将其实例化为子类sportsCar

为什么我不能访问子类的字段weight?有没有我需要使用的技术来访问这个字段,或者我只是错过了重点?


编辑 我意识到以下将编译。但练习的重点是我试图理解多态性的概念

Sub Main()

    Dim myCar As sportsCar
    myCar = New sportsCar() 

    myCar.numDoors = 4
    myCar.weight = 100

End Sub

如果子类的成员不可访问,那么多态的意义何在?

    Dim myCar As Car
    myCar = New sportsCar 
4

2 回答 2

2

您无法访问weight属性,因为Car类没有属性。您必须sportsCar先将对象转换为:

CType(myCar.weight, GetType(sportsCar)) = 100
于 2013-04-02T08:00:14.800 回答
1

你的实际问题似乎是,

“多态的意义何在?”

回答,

它允许我们处理一类类型的所有子类。为了说明,假设我有两个人为的功能。

Sub SetDoors (ByVal car As SportsCar,  ByVal doors As Integer)
    car.NumDoors = doors
End Sub

Sub SetDoors (ByVal otherCar As Car,  ByVal doors As Integer)
    car.NumDoors = doors
End Sub

因为多态是 CTS 的一部分并且在 VB.Net 中是允许的,所以我不需要为每种可能的类型复制通用功能。

我可以省略该SportsCar函数的专用版本,因为SportsCar它是Car. 该Car函数的版本将适用于Car包括的所有继承者SportsCar。如果没有多态性,这是不允许的。


如果要在所有子类上实现抽象成员,则将类标记为MustInherit并使用MustOverride关键字。

于 2013-04-02T08:29:53.500 回答