- 메서드는 같지만 동작 방식은 다르게 다형성을 주고 싶은 경우 사용.(interface, implements, abstract public 메서드, public static final 상수)
- 다중 구현 가능
- 협업시 객체의 내부 구조를 모르더라도 인터페이스의 메서드 명만 알면 사용 가능 => 협업에 유리
- 모든 메서드가 구현부가 없는 추상메서드로 이루어진 메서드
//추상 메서드 선언
public interface RemoteControl{
//상수
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//추상메서드(메서드 선언부만 작성)
public void turnOn();
public void turnOff();
public void setVolume(int volume);
}
- 인터페이스에 선언된 추상 메서드는 모두 public abstract의 특성을 갖기 때문에 public abstract를 생략하더라고 컴파일 과정에서 자동으로 붙는다
//구현 클래스
public class Television implements RemoteControl{
//필드
private int volume;
//turnOn() 추상 메서드의 실체 메서드
public void turnOn(){
System.out.println("TV를 켭니다");
}
//turnOff() 추상 메서드의 실체 메서드
public void turnOff(){
System.out.println("TV를 끕니다");
}
//setVolume() 추상 메서드의 실체 메서드
public void setVolume(int volume){
if(volume > RemoteControl.MAX_VOLUME){
this.volume = RemoteControl.MAX_VOLUME;
}else if (volume < RemoteControl.MIN_VOLUME){
this.volume = RemoteControl.MIN_VOLUME;
}else{
this.volume = volume;
}
System.out.println("현재 TV 볼륨:" + this.volume);
}
}
public class RemoteControlExample{
public static void main(String[] args){
RemoteControl rc;
rc = new Television();
rc = new Audio();
}
}
- 인터페이스 변수에 구현 객체 대입해서 이런식 으로 사용을 하게 된다.