리셋 되지 말자

상속과 T 메모리 본문

Java(폐지)/Java 공부

상속과 T 메모리

kyeongjun-dev 2020. 7. 16. 16:29

상속과 T 메모리를 알아보기 위한 예제

  • Amimal
package inheritance03;

public class Animal {
    public String name;

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

public class Penguin extends Animal{
    public String habitat;

    public void showHabitat() {
        System.out.printf("%s는 %s에 살아\n", name, habitat);
    }
}
  • main
package inheritance03;

public class Main01 {

    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";

        pingu.showName();
        //pingu.showHabitat();

        //Penguin happyfeet = new Animal();

    }

}
  • 결과

  • main 함수의 pororo 객체참조변수에 인스턴스가 생성된 후의 T 메모리 상태

  • Penguin 클래스의 인스턴스만 힙 영역에 생긴 게 아니라 Animal 클래스의 인스턴스도 함께 힙 영역에 생긴 것을 볼 수 있다.
    -> 하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 함께 생성된다.
    -> 그림에서는 생략되었지만 모든 클래스의 최상위 클래스인 Object 클래스의 인스턴스도 함께 생성된다.

  • 아래는 객체참조변수 pingu가 인스턴스를 가리킬 때의 T메모리 상태이다.

  • 얼핏 보면 같아 보이지만 차이가 있다. 코드를 살펴보면
    -> Penguin pororo = new Penguin();
    -> Animal pingu = new Penguin();
    pororo의 경우 Amimal을 상위 클래스로 갖는, Penguin 클래스 형태의 객체 참조 변수인 반면 pingu는 Animal 클래스 형태의 객체 참조 변수이다. 따라서 pingu는 Animal만 가르키므로 Penguin 클래스에 있는 속성이 habitat과 메서드 showHabitat()을 사용하지 못한다.

'Java(폐지) > Java 공부' 카테고리의 다른 글

참조 변수의 복사  (0) 2020.07.20
다형성: 사용편의성  (0) 2020.07.17
상속과 인터페이스  (0) 2020.07.16
상속  (0) 2020.07.16
5일차-클래스 멤버 vs 객체 멤버 = static 멤버 vs 인스턴스 멤버  (0) 2020.07.15
Comments