[JAVA] interface

이현경·2021년 4월 23일
0

JAVA

목록 보기
56/77
  • 인터페이스 구성요소
    상수
    추상 메소드
    default 메소드 : 패키지가 같은 경우에만 상속이 가능하고, 패키지가 다르면 상속을 할 수 없다.
    정적 메소드
package package4;

// 모든 소스파일의 확장자는 .java이다.
// 모든 소스파일을 compile한 바이트 코드 파일의 확장자는 .class이다.
public interface Ex08 {

	// 컴파일 시에 public static final 이 붙는다.
	int MAX_VOLUME = 10;	// 상수
	int MIN_VOLUME = 0;
	
	// 추상 메소드 : 실행 블럭이 없는 메소드
	// 컴파일 시에 public abstract 가 붙는다.
	void turnOn();
	void turnOff();
	void setVolume(int volume);
	
	// default 메소드
	default void setMute(boolean mute) {
		if(mute) {
			System.out.println("무음 처리합니다.");
		} else {
			System.out.println("무음 해제합니다.");
		}
	}
	
	// 정적 메소드
	static void changeBattery() {
		System.out.println("건전지를 교환합니다.");
	}
	
	/* 인터페이스에서는 일반 메소드를 사용할 수 없다.
	void add() {
		System.out.println(MAX_VOLUME + MIN_VOLUME);
	}
	*/
}
package package4;

// class에서 interface를 상속 받아온다.
// 추상 메소드를 class가 상속 받으면 구현(재정의)해야 한다. implement
// interface를 class가 상속하게 되면 interface 내에 있는 추상 메소드를 구현 해야한다.
public class Ex09 implements Ex08 {

	private int volume;	// 현재 볼륨을 저장
	@Override
	public void turnOn() {
		System.out.println("Audio를 켭니다.");
	}
	
	@Override
	public void turnOff() {
		System.out.println("Audio를 끕니다.");
	}
	
	@Override
	public void setVolume(int volume) {
		if(volume > Ex08.MAX_VOLUME) {
			this.volume = Ex08.MAX_VOLUME;
		} else if(volume < Ex08.MIN_VOLUME) {
			this.volume = Ex08.MIN_VOLUME;
		} else {
			this.volume = volume;
		}
		System.out.println("현재 소리 크기는 " + this.volume + "입니다.");
	}
}
package package4;

public class Ex09Test {

	public static void main(String[] args) {
		Ex09 ex = new Ex09();
		ex.setVolume(11);
		ex.setVolume(-20);
		ex.setVolume(5);
		System.out.println();
		
		// interface 변수는 Ex09의 부모이므로 Ex09로 만든 객체를 참조할 수 있다.
		// interface를 상속받은 객체를 참조하는 변수를 만들 수 있다.
		Ex08 ex1 = new Ex09();
		ex1.setVolume(11);
		ex1.setVolume(-20);
		ex1.setVolume(5);
		
		// interface는 추상 메소드를 가지고 있어 완성되어있지 않으므로 객체 생성을 할 수 없다.
		// Ex08 ex2 = new Ex08();
		
	}

}
  • 실행결과
profile
25. 컴퓨터학과 졸업 / SQLD, 정보처리기사 취득

0개의 댓글