このコードがあるとしましょう:
class Animal {
int legs = 4;
int head = 1;
}
public class Dog extends Animal {
public static void main (String []args) {
Dog dog = new Dog();
}
}
super()
引数のないコンストラクターの最初の行に暗黙的に配置されていることを認識しているため、コンストラクターが実行され、 のインスタンス変数が設定されることがわかっていAnimal
ますAnimal
。
Animal
この目的のために、これらの変数がスーパー コンストラクターによって初期化されると ( )、それらのインスタンス変数が Animal オブジェクトに保持されるか、サブクラスにコピーされるか( )を理解したいと思いますDog
。
最初のケースでは、オブジェクトAnimal
は暗黙的にインスタンス化され、インスタンスがそれらの変数の 1 つにアクセスする必要があるsuper();
ときはいつでも、インスタンスに保持されている(バックグラウンドで作成された) 変数へのアクセスが行われます。または 2 番目のケースで、オブジェクト Animal が一時的に作成される場合、すべてのインスタンス変数 ( 内) がインスタンスにコピーされ、一時的に作成された のインスタンスが削除されます。Dog
Animal
Animal
Dog
Animal
個人的には、たとえば、Dog
オブジェクトは、オブジェクトに直接接続されているオブジェクトに直接リンクされると思いAnimal
ます。
このようにですか?