Я не понимаю этого поведения Java. У меня есть два класса:
class C1 {
public void m1(double num) {
System.out.println("Inside C1.m1(): " + num);
}
}
class C2 extends C1 {
public void m1(int num) {
System.out.println("Inside C2.m1(): " + num);
}
}
И это моя главная:
public class Main {
public static void main(String[] args) {
C1 c = new C2();
c.m1(10);
}
}
И результат:
Inside C1.m1(): 10.0
Когда я ожидал:
Inside C2.m1(): 10
Также, когда я пытаюсь выполнить синтаксис кода, я нашел это:
Где находится другой m1 класса C2?
Я также проверяю байт-код моего Main.class, и я видел это:
Compiled from "Main.java"
public class com.company.Main {
public com.company.Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2 // class com/company/C2
3: dup
4: invokespecial #3 // Method com/company/C2."<init>":()V
7: astore_1
8: aload_1
9: ldc2_w #4 // double 10.0d
12: invokevirtual #6 // Method com/company/C1.m1:(D)V
15: return
}
Байт-код говорит мне, что он будет вызывать C1.m1 (D) V (строка 12).
Почему метод C1? Я пытаюсь понять это поведение.