Поскольку в любом случае вам необходимо создать конкретный подкласс, вам также необходимо реализовать entityInit()
.Затем будет вызван этот метод.
Вы не можете создавать экземпляры абстрактных классов, и конкретный класс (у которого вы можете создавать экземпляры) не должен иметь абстрактных методов.Так что все в порядке.
Одно замечание: учтите, что при доступе к полям, определенным в подклассе, доступ к ним в entityInit()
может привести к исключению NullPointerException, поскольку они могут не инициализироваться.Пример (на основе вашего класса):
class Person extens Entity {
private String name = "Player";
protected void entityInit() {
int nameLen = name.length(); //NPE here!!!
}
}
Хотя этот пример не имеет большого логического смысла, он должен проиллюстрировать это.Сначала будет вызван конструктор Entity
, который, в свою очередь, вызовет entityInit()
.Однако, поскольку блок инициализатора Person
еще не запущен, name
по-прежнему равен нулю.