먼저 이 시나리오를 생각해 보세요. 이제 클래스 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!