Black_HellCat 2013. 5. 27. 14:49

/*
 interface i에 stop()을 추가
 class a,b,c에서 이를 구현하고 사용하도록 수정
 * 새로운 interface I2에 추상메서드 turn_on(),turn_off를 정의
 * class B,C가 interface I2도 상속받도록
 * class A에서 interface I2 를 사용하도록 수정
 */
package interfacetest2;

class A {

    void autoPlay(I i) {
        i.play();
    }

    void autoStop(I i) {
        i.stop();
    }
        void turn_on(I2 i) {
        i.turn_on();
    }

    void turn_off(I2 i) {
        i.turn_off();
    }
   
}

interface I {
    public abstract void play();
    public abstract void stop();
}

interface I2 {
    public abstract void turn_on();
    public abstract void turn_off();
}

class B implements I, I2 {

    public void play() {
        System.out.println("play in B class");
    }

    public void stop() {
        System.out.println("play in B stop");
    }

    public void turn_on() {
        System.out.println("play in B turn on");
    }

    public void turn_off() {
        System.out.println("play in B turn off");
    }
}

class C implements I,I2 {

    public void play() {
        System.out.println("play in C class");
    }

    public void stop() {
        System.out.println("play in C stop");
    }

    public void turn_on() {
        System.out.println("play in C turn on");
    }

    public void turn_off() {
        System.out.println("play in C turn off");
    }
}

class InterfaceTest2 {

    public static void main(String[] args) {
        A a = new A();
        a.autoPlay(new B());// 비를 인터페이스로 넘김
        a.autoPlay(new C());// 씨를 인터페이스로 넘김
        a.autoStop(new B());
        a.autoStop(new C());
        a.turn_on(new B());
        a.turn_on(new C());
        a.turn_off(new B());
        a.turn_off(new C());       
    }
}