SSブログ

ブリッジメソッド [Java]

社内で開催している「プログラミング言語Java」研修の受講生の一人から、拙著『Java 2 Standard Edition 5.0 Tiger』のp.25のjavapの出力が実際には違うという指摘を2度も受けたので、確認してみました。内容は、次の通りです。

次のように3つのクラスCDEがあります。
class C {
    C dup() {
        return new C();
    }
    public String toString() {
        return "instance of class C";
    }
}

class D extends C {
    D dup() { // 共変戻り値型
        return new D();
    }
    public String toString() {
        return "instance of class D";
    }
}

class E extends D {
    E dup() {
        return new E();
    }
    public String toString() {
        return "instance of class E";
    }
}
それで、この3つのクラスをコンパイルします。
C:\Users\Yoshiki Shibata\Desktop\ftp\code\code\024>javac -version
javac 1.6.0_21

C:\Users\Yoshiki Shibata\Desktop\ftp\code\code\024>javac E.java

C:\Users\Yoshiki Shibata\Desktop\ftp\code\code\024>
javacのバージョンは、1.6.0_21と表示されています。次に、javapコマンドでクラスEを調べます。
C:\Users\Yoshiki Shibata\Desktop\ftp\code\code\024>javap E
Compiled from "E.java"
class E extends D{
    E();
    E dup();
    public java.lang.String toString();
    D dup();
    C dup();
}
本に書いてあるように、3つのdup()メソッドがあるのが分かります。受講生の主張は、2つしか表示されないというものでしたが、一体どんな環境で確認したのか疑問に残ります。

OracleからリリースされているJDKのjavac以外のコンパイラで、クラスEdup()が2つしか生成されないものがあるのでしょうか?
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

櫻庭

EclipseのjavacだとC dup();がないようです。

JDKのjavacとEclipseのjavacは微妙に仕様が異なっているのでいやですね。
by 櫻庭 (2011-07-15 13:39) 

コメントを書く

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

Facebook コメント

トラックバック 0