- 인터페이스에 default 메소드, static 메소드 추가 가능(JDK1.8 ~)
- 인터페이스에 새로운 메소드(추상 메소드)를 추가하기 어려움
∵ 기존에 인터페이스를 구현했던 클래스들에 추상메소드를 추가하려면, 또 구현하고 변경해야함.
⇒ 해결책 : 디폴트 메소드(default method)
interface MyInterface {
void method();
default void newMethod() {}
}
- 디폴트 메소드는 인스턴스 메소드(인터페이스 원칙 위반의 예외!)
- 기존의 인터페이스가 추상메소드만 가질수 있었던 이유 = 충돌때문인데,
디폴트 메소드가 기존의 메소드와 충돌할 때의 해결책??
1) 여러 인터페이스의 디폴트 메소드간의 충돌
: 인터페이스를 구현한 클래스에서 디폴트 메소드를 오버라이딩 해야한다.
2) 디폴트 메소드와 조상 클래스의 메소드 간의 충돌
: 조상 클래스의 메소드가 상속(우선)되고, 디폴트 메소드는 무시된다.
→ 그냥 직접 오버라이딩 하면 해결됨.
출처
- 자바의 정석 기초편 - youtube : ch 7-40, 41