슈퍼타입과 서브타입
- 일반화/특수화 관계: 좀 더 일반적인 타입(슈퍼타입)과 좀 더 특수한 타입(서브타입) 간의 관계
- 중요한 것: 두 타입 간의 관계가
행동에
의해 결정됨(행위적 호환성
)
행위적 호환성
- 서브타입은 슈퍼타입의 행위와 호환되어야 함
- 서브타입은 슈퍼타입을 대체할 수 있어야 함
일반화/특수화 관계 표기법
- 슈퍼타입: 상단, 서브타입: 하단, 속이 빈 삼각형으로 연결
- 서브타입에서는 슈퍼타입과 중복된 행위를 생략 가능
- 서브타입에게 슈퍼타입의 행동이 자동으로 상속됨
// 슈퍼타입 클래스 정의
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
'자바 > 객사오' 카테고리의 다른 글
[객사오] 타입의 계층 - 트럼프 계층 (0) | 2023.08.16 |
---|---|
[객사오] 일반화/특수화 관계 (0) | 2023.08.16 |
[객사오] 정적모델 - 타입의 목적 (0) | 2023.08.16 |
[객사오] 그래서 결국 타입은 추상화다. (0) | 2023.08.16 |
[객사오] 동적모델, 정적모델 (0) | 2023.08.16 |