본문 바로가기

웹 개발

웹 개발_java_2022/11/01_인터페이스

package j13_추상화.인터페이스;

public abstract class Button implements Press,Down,Up {
//탬플릿 메소드 패턴
    //implements 다중상속이 가능하며 부모의 메소드를 반드시 오버라이딩(재정의)해야한다
    @Override
    public void onDown() {

    }

    @Override
    public void onUp() {

    }

    @Override
    public void onPressed() {

    }
}
package j13_추상화.인터페이스;

public interface Down {
    public void onDown();
}
package j13_추상화.인터페이스;

public class Main {
    public static void main(String[] args){

        RemoteControl remoteControl = new RemoteControl(new PowerButton(),new VolumeDownButton(), new VolumeUpButton());
        remoteControl.onPressedPowerButton();
        remoteControl.onPressedPowerButton();
        remoteControl.onDownVolumeDownButton();
        remoteControl.onPressedVolumupButton();
    }
}
package j13_추상화.인터페이스;

public class PowerButton extends Button {
    private boolean status;//boolean은 처음에 false로 최기화됨
    @Override
    public void onPressed(){
        if (status) {
            status = false;
            System.out.println("전원을 끕니다");
        }else{
            status = true;
            System.out.println("전원을 켭니다");

        }
    }
}
package j13_추상화.인터페이스;
/*
* interface(인터페이스)
* 1.기본적으로 모든 메소드가 추상메소드로 정의된다
* 2.일반 메소드를 정의하기위해서는 default 키워드를 사용해야한다
* 3.생성자 정의는 불가능하다
* 4.일반 변수 선언 불가능하다
* 5.상수는 선언할수있다.(접근지정자 public사용)
* */
public interface Press {
    public final String NAME = "button";//[상수선언 ,초기화]private는안됨
    //private String name;[변수선언]
    public void onPressed();//abstract키우드 셍략
//    public Button({[생성자]
//
//    })
//    public default void pop(){[일반메소드]
//
//    }
}
package j13_추상화.인터페이스;

public class RemoteControl {
    private PowerButton powerButton;
    private VolumeDownButton volumeDownButton;
    private VolumeUpButton volumeUpButton;

    public RemoteControl(PowerButton powerButton, VolumeDownButton volumeDownButton, VolumeUpButton volumeUpButton) {
        this.powerButton = powerButton;
        this.volumeDownButton = volumeDownButton;
        this.volumeUpButton = volumeUpButton;
    }
    public void onPressedPowerButton() {
        powerButton.onPressed();
    }
    public void onPressedVolumupButton() {
        volumeUpButton.onPressed();
    }
    public void onPressedVolumDownButton() {
        volumeDownButton.onPressed();
    }
    public void onDownVolumeUpButton() {
        volumeUpButton.onDown();
    }
    public void onDownVolumeDownButton() {
        volumeDownButton.onDown();
    }
}
package j13_추상화.인터페이스;

public interface Up {
    public void onUp();

}
package j13_추상화.인터페이스;

public class VolumeDownButton extends Button {
    @Override
    public void onPressed(){
        System.out.println("음량을 한칸 내립니다");
    }

    @Override
    public void onDown() {
        System.out.println("음량을 계속 올립니다");
    }
}

 

package j13_추상화.인터페이스;

public class VolumeUpButton extends Button {
    @Override
    public void onPressed(){
        System.out.println("음량을 한칸 올림니다");
    }


    @Override
    public void onDown() {
        System.out.println("음량을 계속 내립니다");
    }
}