객체지향의 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 클래스의 인스턴스만 힙 영역에 생긴 게 아니라 Animal 클래스의 인스턴스도 힙 영역에 생긴 것을 볼 수 있다. 하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 생성된다. 사실 Animal 인스턴스 이외에도 모든 클래스의 최상의 클래스인 Object 클래스의 인스턴스도 함께 생성된다.

이어서 Animal pingu = new Penguin();를 실행한 후 T 메모리의 구조는 다음과 같다.

위와 다르게 pingu 객체 참조 변수가 가리키고 있는 것은 Penguin 인스턴스가 아닌 Animal 인스턴스이다. 따라서 pingu 객체 참조 변수는 Penguin의 속성인 habitat과 행위인 showHabitat() 메서드를 사용할 수 없다.

참고

  • 스프링 입문을 위한 자바 객체지향의 원리와 이해

좋은 웹페이지 즐겨찾기