オブジェクト指向についての高説を観察、の続き3
前回までのあらすじ。
オブジェクト指向についての高説を観察
オブジェクト指向についての高説を観察、の続き
オブジェクト指向についての高説を観察、の続き2
といただいた。コメント欄にも返答させていただいたけれど、私が長々と書いた内容*1をさくっとまとめていただいた。つまりはクラスの多重継承では、かぶったメソッドの実装を再定義"しなければ"、あいまいな状態を解決できないと言うこと。あぁ、これだけを言うのにすごく遠回りしてる・・・。orz
多重継承したBabyではGreetを再定義”しない”って選択肢がありませんのよ。
「それじゃぁ、インターフェイスは実装を伴わないから多重継承できるのか。」ということで、インターフェイスの多重継承についてごにょごにょしたのでメモ。
で、IGrandchildを実装するクラスを書いてみる。
Public Interface IBaseSub BaseMethod()
End Interface
Public Interface IChildA
Inherits IBaseEnd Interface
Public Interface IChildB
Inherits IBaseEnd Interface
Public Interface IGrandchild
Inherits IChildA, IChildBEnd Interface
まぁ、こんな感じですかね。せっかくだしダイヤモンド継承っぽくしようと意気込んだわけですが、インターフェイスはメソッドのオーバーライドはできない(そりゃそうです。)ですし、同名メソッドはShadowsしなさいよって言われたので投げやり気味ながらとりあえず書いてみた。(この時点でもうみえみえなんですが。orz)
Public Class ImplementsClass
Implements IGrandchildPublic Sub BaseMethod() Implements IBase.BaseMethod
End Sub
End Class
で、IGrandchildを実装するクラスを書いてみる。Visual Studio は実装する必要のあるものは雛形作ってくれるので便利ですね。
Public Interface IBaseSub BaseMethod()
End Interface
Public Interface IChildA
Inherits IBaseShadows Sub BaseMethod()
End Interface
Public Interface IChildB
Inherits IBaseShadows Sub BaseMethod()
End Interface
Public Interface IGrandchild
Inherits IChildA, IChildBShadows Sub BaseMethod()
End Interface
うわっ連番w
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
・・・それはさておき、まぁShadowsな時点でもう継承でもなんでもないので、薄灰色のよどんだ空気が漂うエントリになってしまったわけですね。orz
インターフェイスの継承について、いまいち理解が足りていない気がします。インターフェイスの継承は、クラスの継承となんとなく雰囲気が違う(というか、意味が違う?)くらい。もう少しお勉強の余地ありですわ。
#「やっぱり面白いな♪オブジェクト指向って。」っていう気持ちは変わりませんが。
*1:言いたかったことからずれているかもしれなかったけれど。