Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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_Overloading - Fatal编程技术网

Java 重载方法调用问题 请让我知道重载是编译时多态性,并考虑引用变量来调用该方法。假设我们有一个参数重载方法,那个么哪个重载方法将被调用将由我们调用该方法的参数或对象抛出决定

Java 重载方法调用问题 请让我知道重载是编译时多态性,并考虑引用变量来调用该方法。假设我们有一个参数重载方法,那个么哪个重载方法将被调用将由我们调用该方法的参数或对象抛出决定,java,overloading,Java,Overloading,请在下面找到我的代码: package com.overload; class Bird { public void call(Bird bird) { System.out.println("Bird"); } } class Crow extends Bird { void call(Crow bird) { System.out.println("Crow" ); } } public class OverloadApp

请在下面找到我的代码:

package com.overload;

class Bird {
    public void call(Bird bird) {
        System.out.println("Bird");
    }
}

class Crow extends Bird {
     void call(Crow bird) {
        System.out.println("Crow" );
    }
}
public class OverloadApp {    
    public static void main(String[] args) {
        Bird bird = new Bird();
        Bird crowBird = new Crow();
        Crow crow = new Crow();

        bird.call(bird);  // 1 - O/P:Bird
        bird.call(crow);  // 2 - O/P:Bird
        bird.call(crowBird);// 3 - O/P: Bird

        crow.call(bird); // 4 - O/P:Bird
        crow.call(crow); // 5 - O/P:Crow
        crow.call(crowBird); // 6 - O/P:Bird

        crowBird.call(bird); // 7 - O/P:Bird
        crowBird.call(crow); // 8 - O/P:Bird
        crowBird.call(crowBird); // 9 - O/P:Bird
    }
}
对于
bird.call(crow);//2-O/P:Bird
-Bird将决定调用哪个重载方法,或者参数crow决定调用哪个重载方法

看到O/p后,我有点困惑

谢谢, Kamal

这一调用

调用
call(Bird Bird)
,因为两个变量的声明类型都是
Bird
,它只知道方法的
Bird
版本。它不知道另一个

但是变量
crow
被声明为
crow
,因此有两种方法可供选择


如果是这种情况,为什么
crow.call(bird);//4-O/P:Bird


crow.call(crowBird);//6-O/P:Bird
它们是鸟。在这两种情况下,O/P应为“Crow”,因为声明的类型为
Crow
卡马尔·维尔马

没有。
由于变量
bird
crowBird
被声明为
bird
类型,因此无法将它们传递到方法的Crow版本,尽管它可用于变量
Crow

你的问题是什么?这不是很清楚。您好,我只是想知道为什么O/P2是bird,我想它应该是Crow,因为我已经传递了Crow对象(也是引用),将调用哪个重载方法是由引用决定的。如果是这样,那么为什么Crow.call(bird);//4-O/P:鸟和乌鸦。呼叫(乌鸦);//6-O/P:鸟是鸟。在这两种情况下,O/P应该是Crow,因为声明的类型是Crow。是的,我的错。。明白了,谢谢
    bird.call(crow);  // 2 - O/P:Bird
    crowBird.call(crow); // 8 - O/P:Bird