>Java >java지도 시간 >재정의 후 Java 인터페이스의 기본 메소드를 명시적으로 호출하려면 어떻게 해야 합니까?

재정의 후 Java 인터페이스의 기본 메소드를 명시적으로 호출하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-11 18:33:10761검색

How Can I Explicitly Call a Java Interface's Default Method After Overriding?

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의 afoo()에서 A.foo()의 기본 구현을 명시적으로 호출하려면 다음을 사용할 수 있습니다. 구문:

A.super.foo();

이 접근 방식을 사용하면 메소드가 재정의되었거나 다른 기본 구현과 충돌하는 경우에도 메소드의 원래 기본 구현에 액세스할 수 있습니다.

더 복잡한 시나리오에서 여러 인터페이스에 동일한 이름의 기본 메소드가 포함되어 있는 경우 동일한 구문을 사용하여 원하는 특정 기본 구현을 선택할 수 있습니다. 사용:

public class ChildClass implements A, C {
    @Override
    public void foo() {
       // Override and do something else

       // Or manage conflicts
       A.super.foo();
       C.super.foo(); // Default implementation from C
    }

    public void bah() {
       A.super.foo(); // Default implementation from A
       C.super.foo(); // Default implementation from C
    }
}

기본 메소드를 명시적으로 호출함으로써 재정의 계약을 위반하지 않고도 인터페이스 확장, 충돌 해결, 필요에 따라 원래 구현에 액세스하는 방법을 제어할 수 있습니다. 이는 인터페이스 기반 디자인에 유연성과 맞춤화 기능을 제공합니다.

위 내용은 재정의 후 Java 인터페이스의 기본 메소드를 명시적으로 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.