オブジェクト向けの4つのプロパティ(2):継承(3)


6.継承とTメモリ


次のサンプルコードを表示します.
Animal.java
package inheritance03;

public class Animal {
    public String name;
    
    public void showName(){
        System.out.println("안녕 나는 %s야. 반가워\n", name);
    }   
}
Penguin.java
package inheritance03;

public class Penguin extends Animal{
    public String habitat;
    
    public void showHabitat(){
        System.out.println("%s는 %s에 살아\n", name, habitat);
    }   
}
Driver.java
package inheritance03;

public Class Driver {
    public static void main(String[] args) {
        Penguin pororo = new Penguin();
        
        pororo.name = "뽀로로";
        pororo.habitat = "남극";
        
        pororo.showName();
        pororo.showHabitat();
        
        Animal pingu = new Penguin();
        
        pingu.name = "핑구";
        // pingu.habitat = "EBS";
        
        pinu.showName();
        // pingu.showHabitat();
        
        // Penguin happyfeet = new Animal();
    }
}
Penguin pororo = new Penguin();実行後、Tメモリ構造は以下の通りである.

PenguinクラスのインスタンスがHip領域に現れるだけでなく,AnimalクラスのインスタンスもHip領域に現れることが分かる.하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 생성된다.事実上のAnimalインスタンスに加えて、すべてのクラスの最適クラスObjectクラスのインスタンスが作成されます.
続いてAnimalpingu=new Penguin();実行後、Tメモリの構造は以下の通りである.

これとは異なり、pinguオブジェクト参照変数はPenguinインスタンスではなくAnimalインスタンスを指します.したがって、pinguオブジェクト参照変数はPenguin属性habitと動作showHabitat()メソッドを使用できません.
リファレンス
  • Javaオブジェクト向けSpringの入門原理と
  • を理解する