请告诉我,因为重载是编译时多态性,它会考虑用于调用方法的引用变量。假设我们有参数重载方法,那么重载方法将调用将由我们调用方法的参数或对象throw决定。
请在下面找到我的代码:
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后,我有点困惑。
谢谢, 哈拉
答案 0 :(得分:0)
此调用
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”,因为声明的类型为Crow
。 - Kamal Verma
没有。
由于变量bird
和crowBird
被声明为Bird
类型,因此它们无法传递给方法的 Crow 版本,尽管它可用于变量{ {1}}。