자바에서는 클래스를 통한 다중 상속은 지원하지 않고 인터페이스를 통해 다중 상속을 지원
→ 다중 상속의 모호성 해결
추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만
인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함할 수 있다.
자바 8부터는 인터페이스에 디폴트 메서드(default method)를 지원
default 키워드를 반드시 붙여서 메서드 작성
interface Printable {
public abstarct void paper();
...
public default void setPrint(boolean color){
if(color){
System.out.println("컬러 출력");
}
else {
System.out.println("흑백 출력");
}
}
...
}
디폴트 메서드의 목적은 기존 인터페이스 기능을 확장하며, 구현체에 공통적으로 들어갈 기능(코드)를 디폴트 메서드 내부에 작성함으로써 반복되는 코드의 작성을 줄여줌.
인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속받을 수 있다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
/*
클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며,
모든 메소드는 public abstract이어야 함
인터페이스에 선언된 상수와 추상 메서드는 public static final과
public abstract를 컴파일 시에 자동으로 생성해주기 때문에 생략 가능
*/
class 클래스이름 implements 인터페이스이름 { ... }