我很困惑:
我运行这个例子,结果是2。
我找不到任何解释:
-
所以我们有一个F对象。这里称为
x.fun(x)
,并将F对象的副本发送给fun方法。 -
这里我们有
fun(D d)
,其中我们将有x的副本,但在D对象中。 -
D .method()显然是为我调用返回1的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));
}
}
-
d.method()
方法调用执行适合d
运行时类型的方法。 -
在您的示例中,
d
的运行时类型是F
(因为您在main
中创建了F
的实例并将其传递给fun()
方法)。 -
F
扩展E
,E
覆盖method()
。因此,d.method()
调用E
对method()
的实现,返回2.