您好我不知道编译器如何确定执行哪个方法。我知道有编译时间和执行时间。我们有重载方法。
public class A{
void print(A x){
System.out.println("This is message A");
}
}
public class B extends A{
void print (B x){
System.out.println("This is message B");
}
}
A a = new A();
B b = new B();
A ab = new B();
b.print(a);
b.print(ab);
在两次通话中,结果都是:
这是消息A
答案 0 :(得分:1)
这既不是超载也不是覆盖。其次,您不能指向具有子引用的父对象
答案 1 :(得分:-2)
Java中没有动态绑定。所有方法调用都在编译期间解析(除非使用反射,这不是这里的情况)
但是,类print()
的{{1}}方法不会覆盖类B
中的方法,因为参数的类型不同。此外,对编译器来说重要的是变量的正式声明,而不是它的赋值。因此,ab变量被称为A
类型的对象。因此,编译器将调用A
类的print()
,因为它未在A