とにかく具体的なサブクラスを作成する必要があるのでentityInit()
、同様に実装する必要があります。その後、そのメソッドが呼び出されます。
抽象クラスのインスタンスを作成することはできません。また、(インスタンスを作成できる)具象クラスに抽象メソッドを含めることはできません。だからすべてが大丈夫です。
注:サブクラスで定義されたフィールドにアクセスする場合、それらにアクセスすると、entityInit()
初期化されない可能性があるため、NullPointerExceptionが発生する可能性があることに注意してください。
例(クラスに基づく):
class Person extens Entity {
private String name = "Player";
protected void entityInit() {
int nameLen = name.length(); //NPE here!!!
}
}
この例は論理的にはあまり意味がありませんが、要点を説明する必要があります。最初にEntity
コンストラクターが呼び出され、次にコンストラクターが呼び出されますentityInit()
。ただし、のイニシャライザブロックはPerson
まだ実行されていないため、name
まだnullです。