| 著作一覧 |
よく眠ってないので、なお眠い。
// O1.java
package com.example;
public class O1 {
public void hello() {
System.out.println("hello!");
}
public class I1 {
public void hello() {
System.out.println("hello");
}
}
}
に対して
//O2.java
package com.example;
public class O2 extends O1 {
public void hello() {
System.out.println("hell!");
}
public class I1 extends O1.I1 {
public void hello() {
System.out.println("hell");
}
}
}
に対するクライアント
// Oc.java
package com.example;
public class Oc {
public static void main(String[] args) {
O1 o = new O2();
o.hello(); // 仮想化されているのでhell!
O1.I1 in = o.new I1();
in.hello();
in = ((O2)o).new I1();
((O2)o).hello(); // 当然hell!
in.hello();
}
}
コメントの通り、メソッドについてはO2のメソッドが呼び出される。~/test>java com.example.Oc hell! hello hell! hell ~/test>最初の呼び出しで作成されるのは、O1$I1のほうで、呼び出したインスタンスoの静的な宣言に従っている。
ジェズイットを見習え |