- 인터페이스 구성요소
상수
추상 메소드
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();
}
}
- 실행결과