試験の練習をしていて、完全に道に迷ってしまうサンプル問題を見つけました。次のコードについて、出力が何であるかを見つけます。
class Moe {
public void print(Moe p) {
System.out.println("Moe 1\n");
}
}
class Larry extends Moe {
public void print(Moe p) {
System.out.println("Larry 1\n");
}
public void print(Larry l) {
System.out.println("Larry 2\n");
}
}
class Curly extends Larry {
public void print(Moe p) {
System.out.println("Curly 1\n");
}
public void print(Larry l) {
System.out.println("Curly 2\n");
}
public void print(Curly b) {
System.out.println("Curly 3\n");
}
}
public class Overloading_Final_Exam {
public static void main (String [] args) {
Larry stooge1 = new Curly();
Moe stooge2 = new Larry();
Moe stooge3 = new Curly();
Curly stooge4 = new Curly();
Larry stooge5 = new Larry();
stooge1.print(new Moe());
((Curly)stooge1).print(new Larry());
((Larry)stooge2).print(new Moe());
stooge2.print(new Curly());
stooge3.print(new Curly());
stooge3.print(new Moe());
stooge3.print(new Larry());
((Curly)stooge3).print(new Larry());
((Curly)stooge3).print(new Curly());
stooge4.print(new Curly());
stooge4.print(new Moe());
stooge4.print(new Larry());
stooge5.print(new Curly());
stooge5.print(new Larry());
stooge5.print(new Moe());
}
}
私は自分のアイデアを念頭に置いていましたが、Java を実行すると、まったく異なる結果が得られました。
カーリー 1 カーリー 2 ラリー 1 ラリー 1 カーリー 1 カーリー 1 カーリー 1 カーリー 2 カーリー 3 カーリー 3 カーリー 1 カーリー 2 ラリー2 ラリー2 ラリー 1
最初のいくつかはOKですが、その後は本当に理解できません。誰でもこの問題について良い説明がありますか?
ありがとう