请让我知道,因为过载是编译时间多态性,并且它考虑调用该方法的参考变量。假设如果我们具有参数重载的方法,则与哪种过载方法调用的方法将由我们调用方法的参数或对象投掷决定。
请在下面找到我的代码:
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将决定调用哪种超载方法或参数乌鸦决定调用哪种过载方法。
在看到O/P之后,我有点困惑。
谢谢kamal
此调用
bird.call(crow); // 2 - O/P:Bird crowBird.call(crow); // 8 - O/P:Bird
调用call(Bird bird)
,因为两个变量的声明的类型是Bird
,它仅知道该方法的Bird
版本。它不知道另一个。
,但变量crow
被声明为Crow
,因此有两种方法可供选择...
如果是这种情况,那么
crow.call(bird); // 4 - O/P:Bird
和
crow.call(crowBird); // 6 - O/P:Bird
是鸟。在这两种情况下,o/p应该是"乌鸦",因为宣称的类型为Crow
。 - Kamal Verma
否。由于变量bird
和crowBird
被声明为类型Bird
,它们不能传递到该方法的 crow 版本,尽管可用于可变crow
。