java - 为什么父类(super class) B 调用子类 A 的方法?

标签 java c++ inheritance polymorphism

Test3.java:

public class Test3 {
    public static void main(String[] args) {
        A a = new A();
    }
}

class A extends B {

    A() {
        System.out.println("Now in A()");
    }

    void m() {
        System.out.println("Now in m() of A");
    }
}

class B {
    B() {
        System.out.println("Now in B()");
        m();
    }

    void m() {
        System.out.println("Now in m() of B");
    }
}

输出:

    $ java Test3
Now in B()
Now in m() of A
Now in A()

为什么不在第二行输出“Now in m() of B”?

最佳答案

因为 m 方法在 A 中被覆盖了。所以当它转到 super 构造函数,并调用m时,该对象仍然是A的一个实例,所以它调用了A中的方法.

关于java - 为什么父类(super class) B 调用子类 A 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588310/

相关文章:

c++ - 如何使用 atexit() 注册非 void 函数?

c++ - C++ 中的移动赋值问题。非法指令 : 4

java - Hibernate ResultTransformer 无法转换单个列

java - 类中未引用库的错误

java - 如何在当前目录中保存文件?

c++ - scoped_ptr 中的对象分配速度非常快?

c# - 使用派生类类型作为基类泛型操作的参数

c++ - 基类中的私有(private)元素是否会增加派生类的大小?

c# - 在构造函数中调用基础构造函数和其他构造函数

java - 语音转文本 api/库