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

标签 java abstract-class abstract abstract-methods

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

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/

相关文章:

Java 8 forEach 用例

java - Integer.toString(int i) 与 String.valueOf(int i)

c# - 没有抽象方法的抽象类

java - 抽象类构造函数参数与最终数据的抽象方法

java - 当子类无法实现接口(interface)方法,因为父类(super class)有一个具有相同签名的final方法时,你会怎么做?

java - 我如何使抽象类与 JAXB 一起工作

java - (Eclipse)克隆的存储库项目缺少 gen 文件夹

java - 使用java的ldap搜索过滤器

python - Python 3.4+ 中的多个顺序抽象基类

java - 是否有可能有一个具有抽象和完整方法的 Java 接口(interface)?