我有以下代码:
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)
。基于静态绑定的概念和通过静态绑定完成的重载的整体概念,静态绑定查看声明的类型而不是实际类型,为什么结果会这样出现?我非常感谢你的帮助。
An int
可以扩大到double
,但反之则不然。这意味着10
可以打电话B.p(double)
or A.p(int)
but 10.0
is a double
并且不会被隐式转换为int
即仅B.p(double)
将被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)