자바/객사오
[객사오] 슈퍼타입과 서브타입
OverTheHorizon3410
2023. 8. 16. 01:12
슈퍼타입과 서브타입
- 일반화/특수화 관계: 좀 더 일반적인 타입(슈퍼타입)과 좀 더 특수한 타입(서브타입) 간의 관계
- 중요한 것: 두 타입 간의 관계가
행동에
의해 결정됨(행위적 호환성
)
행위적 호환성
- 서브타입은 슈퍼타입의 행위와 호환되어야 함
- 서브타입은 슈퍼타입을 대체할 수 있어야 함
일반화/특수화 관계 표기법
- 서브타입에서는 슈퍼타입과 중복된 행위를 생략 가능
- 서브타입에게 슈퍼타입의 행동이 자동으로 상속됨
// 슈퍼타입 클래스 정의
class Trump {
void flatten() {
System.out.println("납작 엎드릴 수 있다.");
}
void flip() {
System.out.println("뒤집어질 수 있다.");
}
}
// 서브타입 클래스 정의
class TrumpHuman extends Trump {
void walk() {
System.out.println("걸을 수 있다.");
}
}
public class Main {
public static void main(String[] args) {
TrumpHuman trumpHuman = new TrumpHuman();
trumpHuman.flatten(); // 슈퍼타입 메소드 사용
trumpHuman.flip(); // 슈퍼타입 메소드 사용
trumpHuman.walk(); // 서브타입 메소드 사용
}
}
위의 코드에서 TrumpHuman
클래스는 Trump
클래스의 서브타입입니다.
TrumpHuman
은 Trump
의 행동을 자동으로 상속받기 때문에 flatten()
과 flip()
메소드를 호출할 수 있습니다.
또한, walk()
메소드를 추가하여 서브타입의 특수한 행동을 정의했습니다.
Uploaded by N2T