Java 重载、重写和多态性之间的关系?;
为什么输出是 C'm(双人,双人) C'm(双人,双人)Java 重载、重写和多态性之间的关系?;,java,polymorphism,overriding,overloading,Java,Polymorphism,Overriding,Overloading,为什么输出是 C'm(双人,双人) C'm(双人,双人) 对于o1.m(1.0f,1.0f)我想它会调用public void m(float x,float y)在类D中,我不明白为什么它是由声明类型决定的,而不是Java没有的引用类型。要调用的方法签名在编译时确定。Java看到o1是一个C语言,C语言只有一个用于double的方法。浮动与之兼容,因为它们可以加宽,所以选择双版本。此选项构成字节码的一部分。运行时有一个更具体的签名这一事实并没有考虑进去。@Michael谢谢你的回复,这真的很有
对于
o1.m(1.0f,1.0f)
我想它会调用public void m(float x,float y)
在类D
中,我不明白为什么它是由声明类型决定的,而不是Java没有的引用类型。要调用的方法签名在编译时确定。Java看到o1是一个C语言,C语言只有一个用于double的方法。浮动与之兼容,因为它们可以加宽,所以选择双版本。此选项构成字节码的一部分。运行时有一个更具体的签名这一事实并没有考虑进去。@Michael谢谢你的回复,这真的很有帮助!
public class Test5 {
public static void main(String... args){
C o1 = new D();
o1.m(1.0,1.0);
o1.m(1.0f, 1.0f);
}
}
class C{
public void m(double x, double y) {
System.out.println("C' m(double,double)");
}
}
class D extends C{
public void m(float x, float y) {
System.out.println("D's m(float,float)");
}
}