1.私が理解していることから、変数の型は Animal であるため、 a は Animal のすべての特性を持ちます。ただし、作成されたオブジェクトは Lizard であるため、Lizard クラスのオーバーライドされたメソッドは、Animal クラスのメソッドの代わりに使用されます。これでいいのか>
はい、あなたは正しいです。
2.また、作成中にどのクラスコンストラクターが使用されますか?
Animal a = new Lizard("Lizzy", 6); //Lizard extends Animal
Lizard は Animal のサブクラスであるため、最初にLizardsコンストラクターが呼び出され、次に Lizards コンストラクターからAnimalコンストラクターが呼び出されます。this()を使用した Lizard のコンストラクタ。Animal コンストラクターでは、最初の行にsuper()への別の呼び出しがあります。Animal がクラスを拡張しないと仮定すると、コンストラクターはすべてのオブジェクトのスーパークラスとして呼び出されます。java.lang.Object's
java.lang.Object
public Object() {
}
Class Animal {
public Animal(){
//there will be a super call here like super()
}
class lizard extends Animal {
public Lizard(your args) {
//there will be a super() call here and this call's animal's no-args constructor
}
}
}
実行の順序は次のようになります
- トカゲのコンストラクタが呼び出されます
- オーバーロードされたコンストラクターへの this() 呼び出しがない限り、super() への呼び出し、つまり、呼び出しの動物の引数のないコンストラクター
- java.lang.Object のコンストラクターは、super() を使用して animal から呼び出されます。
- java.lang.Object のコンストラクター コードが実行されます
- 動物コンストラクターコードが実行されます
- Lizards コンストラクター コードが実行されます