Java에서 기본 메소드 호출
질문:
기본 메소드를 호출하는 것이 가능합니까? 메소드 구현이 재정의되었거나 여러 인터페이스의 구현과 충돌하는 경우? 다음 코드를 고려하십시오.
interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // How to invoke A.foo() here? } }
답변:
기본 메소드 A.foo()는 A.super.foo() 구문을 사용하여 명시적으로 호출할 수 있습니다. . 이 구문을 사용하면 메소드가 재정의되었거나 충돌로 인해 사용할 수 없는 경우에도 메소드의 원래 구현에 액세스할 수 있습니다.
예:
A를 호출하려면 클래스 B의 afoo() 메소드에서 foo()를 사용하면 다음을 사용할 수 있습니다. 코드:
public void afoo() { A.super.foo(); }
추가 용도:
super 구문은 다른 인터페이스에서 기본 메서드에 액세스하는 데에도 사용할 수 있습니다. 예를 들어 인터페이스 C에도 기본 메서드 foo()가 있는 경우 다음과 같이 클래스 B의 두 구현에 모두 액세스할 수 있습니다.
public void bah() { A.super.foo(); // Original `foo()` from interface `A` C.super.foo(); // Original `foo()` from interface `C` }
super 구문을 사용하면 호출할 기본 구현을 선택적으로 선택할 수 있습니다. 또는 자신만의 방법으로 여러 구현을 결합할 수 있습니다.
위 내용은 재정의되거나 충돌할 때 Java에서 기본 메서드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!