- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
- 두 클래스를 조상과 자손으로 관계를 맺어주는 것
- 자손은 조상의 모든 멤버를 상속받음 (생성자, 초기화블럭 제외)
- 자손의 멤버개수는 조상보다 적을 수 없음 (같거나 많다)
- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리함
- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않음
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이들을 조합해서 하나의 커다란 클래스를 만듦.
상속 VS 포함
- 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다.
- java는 단일상속만을 허용 (C++은 다중상속 허용)
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
class TVCR extends TV, VCR { // 이와 같은 표현은 허용하지 않음
//...
}
- 조상이 없는 클래스는 자동적으로 object클래스를 상속받게 함
- 상속계층도의 최상위는 object클래스가 위치함
- 모든 클래스는 object클래스에 정의된 11개의 메서드를 상속받음
(toString(), equals(Object obj), hashCode(),...)
메이플스토리 캐릭터를 통해 실습해 보았다.
주석으로 설명..
package ch07;
class 초보자{
String skill1 = "달팽이세마리";
}
class 마법사 extends 초보자{
String skill2 = "매직클로";
}
// 썬콜 전직 / skill3 / 썬더볼트
class 썬콜 extends 마법사{
String skill3 = "썬더볼트";
}
// 초보자 -> 로그 -> 시프전직
// 로그 skill2 더블 스탭
// 시프 skill3 새비지 블로우
class 로그 extends 초보자{
String skill2 = "더블스탭";
}
class 시프 extends 로그{
String skill3 = "새비지 블로우";
}
public class S01 {
public static void main(String[] args) {
마법사 magic1 = new 마법사();
System.out.println(magic1.skill1);
System.out.println(magic1.skill2);
System.out.println(magic1.skill3);
}
}