- 구체적인 것을 만들어서 “추상화” 하는 것

package ex07.ch01;
abstract class 판사 {
    public void 심문() {
        System.out.println("판사는 심문한다");
    }
}
class 왕비 extends 판사 {
}
class 왕 extends 판사 {
}
abstract class 증인 {
    public abstract void 대답();
}
class 엘리스 extends 증인 {
    @Override
    public void 대답() {
        System.out.println("엘리스는 대답한다");
    }
}
class 모자장수 extends 증인 {
    public void 대답() {
        System.out.println("모자장수는 대답한다");
    }
}
class 토끼 extends 증인 {
    @Override
    public void 대답() {
        System.out.println("토끼는 대답한다");
    }
}
class Game {
    public void 심문(판사 u) {
        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);
    }
}
package ex07.ch01;
abstract class 판사 {
    public void 심문() {
        System.out.println("판사는 심문한다");
    }
}
class 왕비 extends 판사 {
}
class 왕 extends 판사 {
}
abstract class 증인 {
    public abstract void 대답();
}
class 엘리스 extends 증인 {
    @Override
    public void 대답() {
        System.out.println("엘리스는 대답한다");
    }
}
class 모자장수 extends 증인 {
    public void 대답() {
        System.out.println("모자장수는 대답한다");
    }
}
class 토끼 extends 증인 {
    @Override
    public void 대답() {
        System.out.println("토끼는 대답한다");
    }
}
class Game {
    public void 심문(판사 u) {
        u.심문();
    }
    public void 대답(증인 u) {
        u.대답();
    }
}
public class AliceApp {
    public static void main(String[] args) {
        Game game = new Game();
        판사 p1 = new 왕();
        game.심문(p1);
        증인 z1 = new 엘리스();
        game.대답(z1);
    }
}
Share article