オブジェクト指向についての高説を観察、の続き3

前回までのあらすじ。
オブジェクト指向についての高説を観察
オブジェクト指向についての高説を観察、の続き
オブジェクト指向についての高説を観察、の続き2

前回のコメント欄でεπιστημηさんに


多重継承したBabyではGreetを再定義”しない”って選択肢がありませんのよ。
といただいた。コメント欄にも返答させていただいたけれど、私が長々と書いた内容*1をさくっとまとめていただいた。つまりはクラスの多重継承では、かぶったメソッドの実装を再定義"しなければ"、あいまいな状態を解決できないと言うこと。あぁ、これだけを言うのにすごく遠回りしてる・・・。orz
「それじゃぁ、インターフェイスは実装を伴わないから多重継承できるのか。」ということで、インターフェイスの多重継承についてごにょごにょしたのでメモ。

Public Interface IBase

Sub BaseMethod()

End Interface



Public Interface IChildA
Inherits IBase

End Interface



Public Interface IChildB
Inherits IBase

End Interface



Public Interface IGrandchild
Inherits IChildA, IChildB

End Interface

で、IGrandchildを実装するクラスを書いてみる。

Public Class ImplementsClass
Implements IGrandchild

Public Sub BaseMethod() Implements IBase.BaseMethod

End Sub

End Class

まぁ、こんな感じですかね。せっかくだしダイヤモンド継承っぽくしようと意気込んだわけですが、インターフェイスはメソッドのオーバーライドはできない(そりゃそうです。)ですし、同名メソッドはShadowsしなさいよって言われたので投げやり気味ながらとりあえず書いてみた。(この時点でもうみえみえなんですが。orz)

Public Interface IBase

Sub BaseMethod()

End Interface



Public Interface IChildA
Inherits IBase

Shadows Sub BaseMethod()

End Interface



Public Interface IChildB
Inherits IBase

Shadows Sub BaseMethod()

End Interface



Public Interface IGrandchild
Inherits IChildA, IChildB

Shadows Sub BaseMethod()

End Interface

で、IGrandchildを実装するクラスを書いてみる。Visual Studio は実装する必要のあるものは雛形作ってくれるので便利ですね。

Public Class ImplementsClass
Implements IGrandchild


Public Sub BaseMethod() Implements IBase.BaseMethod

End Sub


Public Sub BaseMethod1() Implements IChildA.BaseMethod

End Sub


Public Sub BaseMethod2() Implements IChildB.BaseMethod

End Sub


Public Sub BaseMethod3() Implements IGrandchild.BaseMethod

End Sub


End Class

うわっ連番w
・・・それはさておき、まぁShadowsな時点でもう継承でもなんでもないので、薄灰色のよどんだ空気が漂うエントリになってしまったわけですね。orz
インターフェイスの継承について、いまいち理解が足りていない気がします。インターフェイスの継承は、クラスの継承となんとなく雰囲気が違う(というか、意味が違う?)くらい。もう少しお勉強の余地ありですわ。

#「やっぱり面白いな♪オブジェクト指向って。」っていう気持ちは変わりませんが。

*1:言いたかったことからずれているかもしれなかったけれど。