다음의 예제코드를 보자.
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 메모리 구조는 다음과 같다.
.png)
Penguin 클래스의 인스턴스만 힙 영역에 생긴 게 아니라 Animal 클래스의 인스턴스도 힙 영역에 생긴 것을 볼 수 있다. 하위 클래스의 인스턴스가 생성될 때 상위 클래스의 인스턴스도 생성된다. 사실 Animal 인스턴스 이외에도 모든 클래스의 최상의 클래스인 Object 클래스의 인스턴스도 함께 생성된다.
이어서 Animal pingu = new Penguin();를 실행한 후 T 메모리의 구조는 다음과 같다.
.png)
위와 다르게 pingu 객체 참조 변수가 가리키고 있는 것은 Penguin 인스턴스가 아닌 Animal 인스턴스이다. 따라서 pingu 객체 참조 변수는 Penguin의 속성인 habitat과 행위인 showHabitat() 메서드를 사용할 수 없다.
참고