Java 构造函数内部的多态性

2024-04-19

Code:

class A{

    A()  {
        test();
    }
    void test(){
        System.out.println("from A");
    }
}

class B extends A {

    void test() {

        System.out.println("from B");

    }

}

class C {

    public static void main(String args []){

        A a = new B();

        a.test();
    }
}

Output:

from B 
from B

为什么会这样打印?


This is 非常糟糕代码。发生的事情是这样的void test()在子类中被覆盖B.

new B();创建类的实例B。您引用的事实将其投射到A与此无关。但即使子类尚未构建,Java运行时从父类的构造函数中调用该子类中的方法A.

使用此(反)模式时要格外小心! (请注意,在 C++ 中,您会得到未定义的行为)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 构造函数内部的多态性 的相关文章

随机推荐