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

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

王林
王林앞으로
2023-05-13 10:04:14892검색

먼저 이 시나리오를 생각해 보세요. 이제 클래스 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으로 문의하시기 바랍니다. 삭제