📚 참고
자바의 정석 기초편 (객체지향개념만)
단일 상속
- 자바는 단일 상속만을 허용 (C++은 다중상속 허용)
- Tv에 power 메서드가 있고 DVD에 power 메서드가 있다면 어느 메서드를 상속 받을지 몰라 충돌이 일어난다.
class TvDVD extends Tv, DVD { // 🚩에러 조상은 하나만 허용됨
// ...
}
- 다중 상속의 효과 내기 : 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
class Tv {
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class DVD {
boolean power;
void power() { power = !power; }
void play() {}
void stop() {}
void rew() {}
void ff() {}
}
class TvDVD extends Tv {
DVD dvd = new DVD();
void play() {
dvd.play();
}
void stop() {
dvd.stop();
}
void rew() {
dvd.rew();
}
void ff() {
dvd.ff();
}
}
- Tv 클래스는 상속 받고 DVD 클래스는 포함하여 다중 상속의 효과를 낼 수 있다.
Object 클래스
- 모든 클래스의 조상
- 부모가 없는 클래스는 자동적으로 Object 클래스를 상속 받게 된다.
- 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속 받는다.
- toString(), equals(Object obj), hashCode(), ...
// 부모 X
class Tv {
// ...
}
// Tv 클래스는 컴파일러에 의해 Object 클래스를 상속 받는다.
class Tv extends Object {
// ...
}
// 부모 O
class SmartTv extends Tv {
// ...
}
상속계층도