我读到只有当你想使用覆盖工具时才应该使用继承。如果您仅将继承用于代码共享,则应使用接口和组合。看看下面的代码:
Public Class Animal
Public Overridable Sub Eat()
MsgBox("Animal Eat no arguement")
End Sub
End Class
Public Class Horse
Inherits Animal
Public Overrides Sub Eat()
MsgBox("Horse Eat no arguement")
End Sub
End Class
Horse 继承自 Animal 并覆盖 Eat。根据我阅读的内容,这是对继承的有效使用。现在假设您添加了一个继承自 animnal 的 Cat 类和 Dog 类。现在说那匹马;Cat 和 Dog 使用 Animal 类中的 Eat 函数(而不是覆盖它),那么根据我读到的内容,这是对继承的无效使用(应该使用接口)。当然,如果您使用接口(即 IEatable)来实现 Eat 接口,则必须在每个类中编写 Eat,这会最大程度地降低可重用性和可维护性。我在这里想念什么?
更新阅读回复后,我相信我可以做这样的事情:
Public Class Animal
Public Overridable Sub Eat()
MsgBox("Animal Eat no arguement")
End Sub
End Class
Public Class Fish
Inherits Animal
Implements ISwim
Private s1 As New Swim
Public Sub Swim() Implements ISwim.Swim
s1.Swim()
End Sub
End Class
Public Class Shark
Inherits Animal
Implements ISwim
Private s1 As New Swim
Public Sub Swim() Implements ISwim.Swim
s1.Swim()
End Sub
End Class
Public Class Elephant
End Class
Public Class Swim
Public Sub Swim()
MsgBox("Animal can swim")
End Sub
End Class
Public Interface ISwim
Sub Swim()
End Interface
在上面的代码中,三只动物中的两只实现了 ISwim,并使用组合来提供 Swim 的实现。这是一种有效的方法吗?