オーバーライド機能を使用する場合にのみ、継承を使用する必要があることを読みました。コード共有に継承のみを使用する場合は、インターフェイスと構成を使用する必要があります。以下のコードを見てください。
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
上記のコードでは、3 匹の動物のうち 2 匹が ISwim を実装し、コンポジションを使用して Swim の実装を提供しています。これは有効なアプローチですか?