这是我的沙坑:
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
答案 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
版本,因为SportsCar
是Car
的多态。 Car
版本的该函数适用于Car
的所有继承者,包括SportsCar
。如果没有多态,就不允许这样做。
如果您希望在所有子类上实现抽象成员,则将该类标记为MustInherit
并使用MustOverride
关键字。