如果子类成员不可访问,为什么要使用多态性?

时间:2013-04-02 07:55:23

标签: vb.net

这是我的沙坑:

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 

2 个答案:

答案 0 :(得分:2)

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

CType(myCar.weight, GetType(sportsCar)) = 100

答案 1 :(得分: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版本,因为SportsCarCar的多态。 Car版本的该函数适用于Car的所有继承者,包括SportsCar。如果没有多态,就不允许这样做。


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