Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重载、重写和多态性之间的关系?;_Java_Polymorphism_Overriding_Overloading - Fatal编程技术网

Java 重载、重写和多态性之间的关系?;

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谢谢你的回复,这真的很有

为什么输出是

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谢谢你的回复,这真的很有帮助!
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)");
    }
}