2010. 8. 11. 09:01

상속

1. 상속 클래스 설계

1-1. 공통적인 속성과 행동이 들어있는 객체를 찾아봅시다.
1-2. 공통적인 상태와 행동을 나타내는 클래스를 설계합니다.
1-3. 특정 하위클래스 유형에만 적용되는 행동(메소드)이 필요한지 결정합니다.
1-4. 공통적인 행동이 필요한 하위클래스를 두 개 이상 찾아서
추상화의 개념을 더 폭넓게 활용할 수 있을지 찾아봅니다.
1-5. 클래스 구조를 완성해봅시다.

Wolf w = new Wolf(); //새로운 Wolf 객체 생성
w.makeNoise(); //Wolf에 있는 메소드 호출
w.roam(); //canine에 있는 메소드 호출
w.eat(); //Wolf에 있는 메소드 호출
w.sleep(); //Animal에 있는 메소드 호출

- 객체 레퍼런스에 있는 메소드를 호출하면
그 객체 형식의 메소드 중에서
가장 구체적인 버전이 호출됩니다.

즉, 가장 아래 있는 것이 호출됩니다.

Wolf객체에 대해 어떤 메소드를 호출하면
JVM에서는 일단 Wolf 클래스에 들어있는 것을 찾아봅니다.
JVM에서 Wolf클래스에 있는 버전을 찾을 수 없으면 
매치되는 것을 찾을 때까지 상속 계층 구조를 따라 올라갑니다.

2. 상속 관계와 클래스/인스턴스 관계

- A는 B다. => 상속 관계
- A에는 B가 있다. => 클래스/인스턴스 관계

3. Q&A
질문: 
하위 클래스에서 상위 클래스에 있는 버전의 메소드와
새로 오버라이드한 버전의 메소드를 둘 다 사용하고 싶다면
어떻게 해야 할까요?

답:
public void roam(){
super.roam(); //상속 받은 메소드를 실행한다.

// 새로 추가할 내용
}