次のコードを試しました
public class HelloWorld {
public void printData(Test t) {
System.out.println("Reached 1");
}
public void printData(newTest t) {
System.out.println("Reached 2");
}
public void printData(newTest1 t) {
System.out.println("Reached 3");
}
public static void main(String args[]) {
Test t1 = new Test();
HelloWorld h = new HelloWorld();
h.printData(t1);
NewTest t2 = new NewTest();
h.printData(t2);
NewTest1 t3 = new NewTest1();
h.printData(t3);
Test t4 = new NewTest();
h.printData(t4);
Test t5 = new NewTest1();
h.printData(t5);
}
}
そして私は簡単なクラスを持っています
class Test {
}
class NewTest extends Test {
}
class NewTest1 extends Test {
}
そして私が得た出力は
Reached 1
Reached 2
Reached 3
Reached 1
Reached 1
出力から、jvm が実行する関数を決定するときに、参照の型のみが考慮され、オブジェクトの実際の型は考慮されないように見えます。
なぜこれが起こるのですか?jvm が実際のオブジェクトを指している参照の型ではなく、実際のオブジェクトの型を考慮できないのはなぜですか?