请让我知道,重载是编译时多态性,它考虑调用该方法的引用变量。假设如果我们有参数重载方法,那么将调用哪个重载方法将由我们调用方法的参数或对象抛出决定。
请在下面找到我的代码:
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
}
}
For bird.call(crow); // 2 - O/P:Bird
-bird将决定调用哪个重载方法或参数crow决定调用哪个重载方法。
看到 O/P 后我有点困惑。
谢谢,
卡迈勒
这个调用
bird.call(crow); // 2 - O/P:Bird
crowBird.call(crow); // 8 - O/P:Bird
call call(Bird bird)
因为声明类型两个变量的Bird
它只知道Bird
该方法的版本。它不认识另一者。
但有变数crow
被声明为Crow
所以有两种方法可供选择...
如果是这样的话,那么为什么
crow.call(bird); // 4 - O/P:Bird
and
crow.call(crowBird); // 6 - O/P:Bird
是鸟。在这两种情况下,O/P 应该是“Crow”,因为声明的类型是Crow
。 ——卡迈勒·维尔马
不。
因为变量bird
and crowBird
被声明为类型Bird
它们不能传递给Crow该方法的版本,尽管它可用于变量crow
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)