这是我检查 Java 继承和方法重载的简单代码。它在我的 IDE 中给出了编译错误。你能不能给一个想法。?代码中注释了错误行。如果我评论该行程序工作正常并提供给定的输出。
class Bird {
void sing() {
System.out.println("I am Singing");
}
}
class Peacock extends Bird {
void sing() {
System.out.println("I am Singing COO COO");
}
public void sing(String adverb) {
System.out.println("I am Singing " + adverb);
}
}
public class OverLoadingDemo {
public static void main(String[] args) {
Bird bird = new Peacock();
bird.sing();//This return I am Singing COO COO
bird.sing("Loudly");//ERROR The method sing() in the type Bird is not applicable for the arguments (String)
}
}
Run Code Online (Sandbox Code Playgroud)
Java 编译器看到bird变量的类型是Bird,并且不知道您打算Peacock在该变量中存储对 a 的引用。由于Bird该类没有调用sing将 aString作为参数的方法,因此它会给您一个错误。
如果Bird该类有一个sing将 aString作为参数的方法,那么这段代码将被编译。更好的是,在运行时,它将使用在类中定义的sing方法的版本(带有String参数),Peacock因为变量在那时bird实际上会保存一个Peacock对象。