抽象类正在使用它自己的抽象方法?

Aus*_*ore 3 java abstract-class abstract abstract-methods

我正在查看游戏中的一些代码,我遇到了一些我以前没见过的东西,我真的不知道最近发生了什么.

public abstract class Entity
{

    public Entity(World world)
    {
        // irrelevent code
        entityInit();
    }

    protected abstract void entityInit();
}
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?它呼吁时会发生什么entityInit()

JB *_*zet 7

从不实例化抽象类.只能实例化其具体的子类.因此,当调用具体子类(让我们调用它Foo)构造函数时,它会调用super(world).然后调用Entity构造函数entityInit(),该构造函数已被覆盖Foo.因此它称之为Foo entityInit具体方法.

请注意,这是不好的做法,因为entityInit将在尚未完全构造的对象上调用该方法.因此,子类必须确保此方法不会访问它可能声明的任何字段,因为它们都将被单元化.