著作一覧 |
よく眠ってないので、なお眠い。
// 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の静的な宣言に従っている。
ジェズイットを見習え |