> Java > java지도 시간 > Java가 다중 상속을 지원하지 않는 이유는 무엇입니까?

Java가 다중 상속을 지원하지 않는 이유는 무엇입니까?

王林
풀어 주다: 2023-05-13 10:04:14
앞으로
962명이 탐색했습니다.

먼저 이 시나리오를 생각해 보세요. 이제 클래스 A가 클래스 B와 클래스 C를 상속하고 test() 메서드가 클래스 B와 클래스 C 모두에 존재하는 경우 클래스 A 객체가 test() 메서드를 호출하면 call 클래스 B의 test()는 어떻습니까? 아니면 C 클래스의 test()는 어떻습니까? 답이 없으므로 Java에서는 다중 상속이 허용되지 않습니다.

그러나 Java의 인터페이스는 다음과 같이 다중 상속될 수 있습니다.

public interface A {
    void test();
}
public interface B {
    void test();
}
public interface C extends A, B{
}
로그인 후 복사

인터페이스가 상속될 수 있는 이유는 무엇입니까?

A, B, C는 모두 인터페이스이기 때문에 인터페이스 A와 B 모두에 테스트 메서드가 정의되어 있더라도 인터페이스는 메서드를 선언할 뿐 실제로 메서드를 구현하지는 않기 때문에 C 인터페이스의 경우 C 인터페이스의 경우 동일한 test() 메서드의 선언을 상속할 뿐이므로 test() 메서드를 구현하려면 C 인터페이스의 구현 클래스가 필요합니다.

public class C1 implements C{
    public void test() {
        System.out.println("hello Hoeller");
    }
}
로그인 후 복사
그럼 인터페이스에는 기본 메소드가 없는 걸까요? 인터페이스에서도 메소드를 구현할 수 없나요?

직접 테스트해 보겠습니다.

public interface A {
    default void test() {
        System.out.println("a");
    }
}
public interface B {
    default void test() {
        System.out.println("b");
    }
}
public interface C extends A, B{
}
로그인 후 복사

이때 C 인터페이스는 컴파일하고 오류를 보고합니다. 오류 메시지는 다음과 같습니다.

com.hoeller.C는 com.hoeller 유형에서 test()에 대해 관련 없는 기본값을 상속합니다. A와 com.hoeller.B

어쨌든 오류가 보고됩니다. 이는 C 인터페이스가 두 인터페이스에서 동시에 기본 메소드 test()를 상속할 수 없음을 의미합니다. 시간.

위 내용은 Java가 다중 상속을 지원하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿