다중 상속이란 하위 클래스가 여러 상위 클래스로부터 동시에 상속받을 수 있어 여러 상위 클래스의 특성을 동시에 가지지만 단점이 크다는 의미입니다.
1. 하위 클래스가 상속한 상위 클래스의 멤버 변수가 동일한 경우 하위 클래스는 언제 사용할 상위 클래스를 결정할 수 없습니다. 변수를 참조합니다.
예:
public class classA // 父类 classA { private int num = 0; } public class classB // 父类 classB { private int num = 1; } public class classC extends classA,classB // 子类 classC 继承于 classA 和 classB { public static void main(String [] args) { classC obj = new classC(); obj.print(); // 调用父类成员变量 num , 那 num 等于 0 还是 1 ? } public void print() { System.out.println(super.num); } }
2. 하위 클래스가 동일한 메서드를 가진 여러 상위 클래스를 상속하고 하위 클래스가 해당 하위 클래스를 재정의하지 않는 경우 메서드 메서드(재정의된 경우 하위 클래스의 메서드가 직접 사용됨)를 사용하면 이 메서드를 호출할 때 호출할 상위 클래스의 메서드를 결정할 수 없습니다.
예:
public class classA // 父类 classA { public void fun() { System.out.print("hello"); } } public class classB // 父类 classB { public void fun() { System.out.print("hello"); } } public class classC extends classA,classB { public static void main(String [] args) { classC t = new classC(); t.print(); } public void print() { super.fun(); // 调用父类中 fun 方法,但由于classA、classB都有fun()方法,将无法确定使用 // 哪个父类中的方法 } }
따라서 Java는 단일 상속만 허용합니다. 즉, 하위 클래스는 하나의 상위 클래스에서만 상속할 수 있습니다. 그러나 하위 클래스의 기능을 확장하기 위해 Java는 다중 상속을 사용하지 않는 단점을 극복하기 위해 인터페이스를 사용합니다.
인터페이스는 특수 추상 클래스입니다. 인터페이스의 멤버 변수는 기본적으로 정적 최종 유형, 즉 상수이며 인터페이스의 메서드는 추상이며 메서드 본문이 없습니다.
특정 메소드는 호출 시 항상 구현 클래스의 메소드만 호출되므로(모호성 없음) 두 번째 단점은 없습니다. 다중 상속; 인터페이스에는 정적 상수만 있지만 정적 변수는 컴파일 타임에 호출 관계를 결정하므로 특정 충돌이 있어도 정적 변수를 참조할 때 오류가 발생합니다. 일반적으로 클래스를 사용합니다. 모호함을 피하기 위해 이름이나 인터페이스 이름을 직접 지정하므로 다중 상속의 첫 번째 단점은 존재하지 않습니다. 인터페이스가 여러 상위 인터페이스를 상속하는 경우에도 이러한 단점은 존재하지 않습니다.
위 내용은 자바는 왜 다중상속을 할 수 없나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!