Java에서 기본 메서드 재정의
Java 8에 도입된 기본 메서드는 기존 구현을 수정할 필요 없이 인터페이스에 대한 확장성을 제공합니다. 그러나 기본 구현이 재정의되었거나 서로 다른 인터페이스의 여러 기본 구현으로 인해 충돌이 있는 경우 기본 구현을 명시적으로 호출할 수 있는지 여부에 대한 의문이 제기됩니다.
다음 예를 고려하세요.
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? } }
클래스 B에서 foo의 기본 구현을 호출하려면 다음을 사용할 수 있습니다. A.super.foo().
public void afoo() { A.super.foo(); }
이 구문을 사용하면 구현 클래스에서 메서드가 재정의된 경우에도 원래 기본 구현에 액세스할 수 있습니다.
여러 인터페이스가 있는 경우 인터페이스 A와 C 모두 foo 메소드를 갖고 있는 것처럼 서명이 동일한 기본 메소드가 있는 경우 원하는 특정 기본 구현을 선택할 수 있습니다. 호출:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); // Accesses original foo() from A C.super.foo(); // Accesses original foo() from C } }
이 구문은 원하는 기본 구현을 선택할 수 있는 유연성을 제공하거나 두 구현을 모두 사용자 정의 foo 메소드에 통합할 수도 있습니다. 메소드 호출 구문은 Java 언어 사양의 15장에 공식적으로 설명되어 있습니다.
위 내용은 Java에서 재정의된 기본 메소드의 구현을 어떻게 명시적으로 호출할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!