package ex07.ch01;
abstract class 판사 {
//public void 심문(){}; // 어차피 껍데기 뿐이니까 이렇게 만들지 말고
//public abstract void 심문(); // body가 없으면 abstract로 만들기
public void 심문() {
System.out.println("판사는 심문한다.");
}
}
class 왕비 extends 판사 {
}
class 왕 extends 판사 {
}
// 1. 실수로 new 하지 않도록 2. 강제성 부여 (대답()(O) / answer()(X)
abstract class 증인 { // 증인은 new할 일이 없다 -> abstract class로 만듦
public abstract void 대답(); // 다 다르므로 구체적인 것 구현 불가
}
class 앨리스 extends 증인 {
public void 대답() {
System.out.println("앨리스는 대답한다.");
}
}
class 모자장수 extends 증인 {
public void 대답() {
System.out.println("모자장수는 대답한다.");
}
}
class 토끼 extends 증인 {
public void 대답() {
System.out.println("토끼는 대답한다.");
}
}
class Game {
public void 심문(판사 u) { // 왕, 왕비 오버로딩하기 싫음 -> 판사 type 쓴다!
u.심문();
}
public void 대답(증인 u) {
u.대답();
}
}
public class AliceApp {
public static void main(String[] args) {
Game g = new Game();
앨리스 s = new 앨리스();
g.대답(s);
판사 ss = new 왕();
g.심문(ss);
}
}

Share article