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