객체지향의 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() 메서드를 사용할 수 없다.
참고
- 스프링 입문을 위한 자바 객체지향의 원리와 이해
Author And Source
이 문제에 관하여(객체지향의 4대 특성(2) : 상속(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsj3282/객체지향의-4대-특성2-상속3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)