我正在查看游戏中的一些代码,我遇到了一些我以前从未见过的东西,我真的不知道发生了什么。
public abstract class Entity
{
public Entity(World world)
{
// irrelevent code
entityInit();
}
protected abstract void entityInit();
}
这是怎么回事?当它调用 entityInit()
时会发生什么?
最佳答案
抽象类永远不会被实例化。只有它的具体子类可以被实例化。因此,当调用具体子类(我们称之为 Foo
)构造函数时,它会调用 super(world)
。实体构造函数然后调用 entityInit()
,它已被 Foo
覆盖。因此它调用 Foo entityInit
具体方法。
请注意,这是不好的做法,因为 entityInit
方法将在尚未完全构建的对象上调用。因此,子类必须确保此方法不访问它可能声明的任何字段,因为它们都将被单元化。
关于java - 抽象类正在使用它自己的抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7644342/