Java 程式語言採用dynamic dispatching。請問下面的Java 程式輸出為何?並請略加解
釋dynamic dispatching。(20 分)
import java.lang.*;
class A1 {
public void accept(B1 V, C1 W) { System.out.println("1.\n");
V.visit(W, this); }
public void accept(B2 V, C2 W) { System.out.println("2.\n");
V.visit(W, this); }
public void accept(B3 V, C3 W) { System.out.println("3.\n");
V.visit(W, this); }
}
class A2 extends A1 {
public void accept(B1 V, C1 W) { System.out.println("4.\n");
V.visit(W, this); }
public void accept(B2 V, C2 W) { System.out.println("5.\n");
V.visit(W, this); }
public void accept(B3 V, C3 W) { System.out.println("6.\n");
V.visit(W, this); }
}
class A3 extends A2 {
public void accept(B1 V, C1 W) { System.out.println("7.\n");
V.visit(W, this); }
public void accept(B2 V, C2 W) { System.out.println("8.\n");
V.visit(W, this); }
public void accept(B3 V, C3 W) { System.out.println("9.\n");
V.visit(W, this); }
}
class B1 {
public void visit(C1 W, A1 U) { System.out.println("11.\n");
W.inspect(U, this); }
public void visit(C2 W, A2 U) { System.out.println("12.\n");
W.inspect(U, this); }
public void visit(C2 W, A3 U) { System.out.println("13.\n");
W.inspect(U, this); }
public void visit(C3 W, A3 U) { System.out.println("14.\n");
W.inspect(U, this); }
}
(請接第二頁)
107年公務人員特種考試警察人員、一般警察人員考試及
107年特種考試交通事業鐵路人員考試試題
全四頁
第二頁
考試別: 鐵路人員考試
等
別: 高員三級考試
類科別: 資訊處理
科
目: 程式語言
class B2 extends B1 {
public void visit(C1 W, A1 U) { System.out.println("15.\n");
W.inspect(U, this); }
public void visit(C2 W, A2 U) { System.out.println("16.\n");
W.inspect(U, this); }
public void visit(C2 W, A3 U) { System.out.println("17.\n");
W.inspect(U, this); }
public void visit(C3 W, A3 U) { System.out.println("18.\n");
W.inspect(U, this); }
}
class B3 extends B2 {
public void visit(C1 W, A1 U) { System.out.println("31.\n");
W.inspect(U, this); }
public void visit(C2 W, A2 U) { System.out.println("32.\n");
W.inspect(U, this); }
public void visit(C2 W, A3 U) { System.out.println("33.\n");
W.inspect(U, this); }
public void visit(C3 W, A3 U) { System.out.println("34.\n");
W.inspect(U, this); }
}
class C1 {
public void inspect(A1 U, B1 V)
{ System.out.println("41.\n"); }
public void inspect(A2 U, B2 V)
{ System.out.println("42.\n"); }
public void inspect(A3 U, B3 V)
{ System.out.println("43.\n"); }
}
class C2 extends C1 {
public void inspect(A1 U, B1 V)
{ System.out.println("51.\n"); }
public void inspect(A2 U, B2 V)
{ System.out.println("52.\n"); }
public void inspect(A3 U, B3 V)
{ System.out.println("53.\n"); }
}
(請接第三頁)
107年公務人員特種考試警察人員、一般警察人員考試及
107年特種考試交通事業鐵路人員考試試題
全四頁
第三頁
考試別: 鐵路人員考試
等
別: 高員三級考試
類科別: 資訊處理
科
目: 程式語言
(請接背面)
class C3 extends C2 {
public void inspect(A1 U, B1 V)
{ System.out.println("61.\n"); }
public void inspect(A2 U, B2 V)
{ System.out.println("62.\n"); }
public void inspect(A3 U, B3 V)
{ System.out.println("63.\n"); }
}
class Demo {
public static void main(String[] arg) {
A2 a; B2 b; C2 c;
a = new A3();
b = new B3();
c = new C3();
a.accept(b, c);
}
} // end of the Demo class