我有以下代码:
import java.lang.*;
public class Program
{
public static void main(String [] args)
{
B a = new A();
a.p(10);
a.p(10.0);
}
}
class B {
public void p(double i)
{
System.out.println(i*2);
}
}
class A extends B{
public void p(int i)
{
System.out.println(i);
}
}
当我使用 执行此代码时B a = new A()
,在这两种情况下都得到 20.0,这是有道理的,因为重载是编译期间的句柄,编译器查看声明的类型并适当地调用函数。由于我们声明的类型是 B 类,因此在这两种情况下都调用了 B 类的方法。现在,如果我这样做A a = new A();
,我应该在两个答案中都得到 10,但我不是。我得到 10a.p(10)
和 20.0 a.p(10.0)
。基于静态绑定的概念和由静态绑定完成的重载的整个概念,它着眼于声明的类型而不是实际的类型,为什么结果会这样?非常感谢您的帮助。