에서 https://dzone.com/articles/interface-default-methods-java
Java 8에는 개발자가 이러한 인터페이스의 기존 구현을 중단하지 않고 인터페이스에 새 메서드를 추가 할 수있는 "기본 메서드"또는 (Defender 메서드) 새 기능이 도입되었습니다. 구체적인 클래스가 해당 메소드에 대한 구현을 제공하지 못하는 상황에서 기본값으로 사용할 인터페이스 정의 구현을 허용하는 유연성을 제공합니다.
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public class ClassAB implements A {
}
사람들이 새로운 기능에 대해 처음 들었을 때 기본 방법에 대해 묻는 한 가지 일반적인 질문이 있습니다.
클래스가 두 개의 인터페이스를 구현하고 두 인터페이스가 동일한 서명으로 기본 메서드를 정의하면 어떻게됩니까?
이 상황을 설명하는 예 :
public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}
public interface B {
default void foo(){
System.out.println("Calling B.foo()");
}
}
public class ClassAB implements A, B {
}
이 코드는 다음 결과로 컴파일되지 않습니다.
java: class Clazz inherits unrelated defaults for foo() from types A and B
이를 해결하려면 Clazz에서 충돌하는 메서드를 재정 의하여 수동으로 해결해야합니다.
public class Clazz implements A, B {
public void foo(){}
}
그러나 우리 자신을 구현하는 대신 인터페이스 A에서 foo () 메서드의 기본 구현을 호출하려면 어떻게해야합니까?
다음과 같이 A # foo ()를 참조 할 수 있습니다.
public class Clazz implements A, B {
public void foo(){
A.super.foo();
}
}