java为什么从第二个继承调用parent的方法是从第一个继承调用?
我很困惑:
我运行这个例子,结果是2
我找不到任何解释:
所以我们有一个F物体。这里称为
x.fun(x)
,F对象的副本被发送到fun方法这里我们有
fun(D d)
,其中我们将有一个x的副本,但在一个D对象中d.method()显然是在调用返回1的me d方法
然而结果是2。。。我怎么了
import java.util.*;
import java.lang.*;
import java.io.*;
class D {int method() {return 1;}}
class E extends D {
int method() {
return 2;
}
}
class F extends E {
int fun(D d){
return d.method();
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Test2 {
public static void main (String[] args) {
F x = new F();
System.out.println(x.fun(x));
}
}
# 1 楼答案
d.method()
方法调用执行适合运行时类型d
的方法在您的例子中,
d
的运行时类型是F
(因为您在main
中创建了F
的一个实例,并将其传递给fun()
方法)F
扩展E
,并且E
覆盖method()
。因此d.method()
调用E
的method()
实现,它返回2