有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    • d.method()方法调用执行适合运行时类型d的方法

    • 在您的例子中,d的运行时类型是F(因为您在main中创建了F的一个实例,并将其传递给fun()方法)

    • F扩展E,并且E覆盖method()。因此d.method()调用Emethod()实现,它返回2