상속 기반의 문제 해결 : 두 클래스 상속 관계로 묶기
class Friend {
protected String name;
protected String phone;
public Friend(String na, String ph) {
name = na;
phone = ph;
}
public void showInfo() {
System.out.println( "이름 : " + name );
System.out.println( "전화 : " + phone);
}
}
"연관된 일련의 클래스들에 대해 공통적인 규약을 정의 및 적용할 수 있다."
"CompFriend와 UnivFriend 클래스에 대해 Friend 클래스라는 규약을 정의하고 적용할 수 있다."
class CompFriend extends Friend {
private String department;
public CompFriend( String na, String de, String ph ) {
super(na, ph);
department = de;
}
public void showInfo() {
super.showInfo();
System.out.println( "부서 : " + department );
}
}
class UnivFriend extends Friend {
private String major;
public UnivFriend ( String na, String ma, String ph ) {
super( na, ph );
major = ma;
}
public void showInfo() {
super.showInfo();
System.out.println("전공 : " + major);
}
}
상속으로 묶은 결과
public static void main( String[] args ) {
Friend[] frns = new Friend[10];
int cnt = 0;
frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
frns[cnt++] = new CompFriend("YOON", "R&D 1", "02-123-999");
frns[cnt++] = new CompFriend("PARK", "R&D 2", "02-321-777");
// 모든 동창 및 동료의 정보 전체 출력
for ( int i = 0; i<cnt; i++) {
frns[i].showInfo(); // 오버라이딩 한 메소드가 호출된다.
System.out.println();
}
}
이러한 클래스 디자인 기반에서 관리 대상이 넷, 다섯으로 늘어 난다면?
인스턴스 관리와 관련해서 코드가 복잡해지지 않는다.
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 17-1. 인터페이스의 기본과 그 의미 (0) | 2019.10.22 |
---|---|
[윤성우 열혈자바] 16-2. Object 클래스와 final 선언 그리고 @Override (0) | 2019.10.22 |
[윤성우 열혈자바] 15-3. instanceof 연산자 (0) | 2019.10.22 |
[윤성우 열혈자바] 15-2. 메소드 오버라이딩 (0) | 2019.10.22 |
[윤성우 열혈자바] 15-1. 상속을 위한 두 클래스의 관계 (0) | 2019.10.22 |