【发布时间】:2019-01-21 20:21:51
【问题描述】:
我无法理解这段代码的行为。 a被定义为A,c被定义为C。 然后,在公共课结束时,a = c。 当 a 调用 display() 方法时,它会到达它的 C 版本。 但是当 a 调用 f() 时,它只能到达 A 版本,尽管第一个参数(字节和 long)比 float 更符合 long。
这是一本书的练习,但解释很少,或者根本不存在。
class A{
public void display(){
System.out.println("I am an A ");
}
public void f(double x){
System.out.println("A.f(double = " + x + ") ");
}
}
class C extends A{
public void display(){
System.out.println("I am a C ");}
public void f(long q){
System.out.println("C.f(long = " + q + ") ");}
}
public class PolySurStack{
public static void main(String Args[]){
byte bb =1; long q = 4; float x = 5.f;
System.out.println(" ** A **");
A a = new A(); a.display();
a.f(bb); a.f(x);
System.out.println();
System.out.println(" ** C **");
C c = new C(); c.display();
c.f(bb); c.f(q); c.f(x);
System.out.println();
a = c; a.display();
a.f(bb); a.f(q); a.f(x);
}
}
【问题讨论】:
-
您可以通过删除所有不必要的代码以使其最小化来提供一个更好的示例(请参阅minimal reproducible example),但这仍然是一个有趣的问题。我不知道答案,但恐怕这是一个重复的问题。
标签: java polymorphism overriding overloading