SSブログ

ブリッジメソッド(2) [Java]

櫻庭さんから、Eclipseでコンパイルされたものは、JDKと異なるというコメントをいただきましたので調べてみました。Eclipseでコンパイルされたものをjavapで調べて見ると次のようになりました。
C:\Users\Yoshiki Shibata\workspace\bridgemethod\bin>javap C
Compiled from "C.java"
class C extends java.lang.Object{
    C();
    C dup();
    public java.lang.String toString();
}

C:\Users\Yoshiki Shibata\workspace\bridgemethod\bin>javap D
Compiled from "D.java"
class D extends C{
    D();
    D dup();
    public java.lang.String toString();
    C dup();
}

C:\Users\Yoshiki Shibata\workspace\bridgemethod\bin>javap E
Compiled from "E.java"
class E extends D{
    E();
    E dup();
    public java.lang.String toString();
    D dup();
}
この場合、次のコードを実行しても正しくクラスEtoStringメソッドが呼び出されます。
class CovariantReturnType {
    public static void main(String[] args) {
        C c = new E();
        C dup = c.dup();
        System.out.println(dup);
    }
}
この場合、c.dup()では、クラスDC dup();が呼ばれて、それがD dup();を呼び出すのですが、そのメソッドはクラスEでオーバーライドされているため、クラスED dup();を呼び出します。クラスED dup();は、E dup();を呼び出すという次第のようです。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0