为什么当你从第二个继承中调用parent的方法时是从第一个继承中调用的



我很困惑:

我运行这个例子,结果是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()调用Emethod()的实现,返回2.

最新更新