ブリッジメソッド [Java]
社内で開催している「プログラミング言語Java」研修の受講生の一人から、拙著『Java 2 Standard Edition 5.0 Tiger』のp.25のjavapの出力が実際には違うという指摘を2度も受けたので、確認してみました。内容は、次の通りです。
次のように3つのクラス
OracleからリリースされているJDKのjavac以外のコンパイラで、クラス
次のように3つのクラス
C
、D
、E
があります。それで、この3つのクラスをコンパイルします。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"; } }
javacのバージョンは、1.6.0_21と表示されています。次に、javapコマンドでクラスEを調べます。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>
本に書いてあるように、3つの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(); }
dup()
メソッドがあるのが分かります。受講生の主張は、2つしか表示されないというものでしたが、一体どんな環境で確認したのか疑問に残ります。OracleからリリースされているJDKのjavac以外のコンパイラで、クラス
E
のdup()
が2つしか生成されないものがあるのでしょうか?
2011-07-14 18:26
nice!(0)
コメント(1)
トラックバック(0)
EclipseのjavacだとC dup();がないようです。
JDKのjavacとEclipseのjavacは微妙に仕様が異なっているのでいやですね。
by 櫻庭 (2011-07-15 13:39)