1、java官方教程里有一段话,解释了原因:
One reason why the Java programming language does not permit you to extend more than one class is to avoid the issues of multiple inheritance of state, which is the ability to inherit fields from multiple classes. For example, suppose that you are able to define a new class that extends multiple classes. When you create an object by instantiating that class, that object will inherit fields from all of the class's superclasses. What if methods or constructors from different superclasses instantiate the same field? Which method or constructor will take precedence? Because interfaces do not contain fields, you do not have to worry about problems that result from multiple inheritance of state.
http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html
2、问题是这段话我没看懂啊,我操。
真的认认真真看了,而且这个教程一节一节看下来,没看懂的地方实在不多啊——可是这么关键性的这一段,居然看不懂啊我操。
3、大伙都抡起袖子来解释一番呗~
伊谢尔伦2017-04-17 17:32:02
공용 클래스 A에는 public int i=0, some() {i=1;}
공용 클래스 B에는 public int i=0, some() {i=2;}
공용 클래스 C가 있습니다. public int i=0, 확장 A,B
이제 C는 c를 인스턴스화하고 c.some(), i=?
호출할 때 여러 상위 클래스 상속을 피하기 위해 여러 클래스를 상속하는 것은 허용되지 않습니다. 동일 메소드나 생성자에 동일한 멤버 변수를 할당하면 지저분해집니다...
高洛峰2017-04-17 17:32:02
이해해 주시고, 틀렸다면 지적 부탁드립니다
다중 확장을 허용하지 않는 이유는 다중 상속을 피하기 위함입니다. 다중 상속을 허용하면 다중 상속자의 변수를 얻을 수 있습니다. 여러 클래스를 상속하는 클래스를 정의하는 경우 생성 메서드를 통해 인스턴스를 얻으면 이 인스턴스는 확장되는 모든 변수/메서드를 가져옵니다. 즉, 여러 부모 클래스에 동일한 변수가 있으면 모든 부모 클래스가 해당 인스턴스를 가져옵니다. 혼란을 야기합니다. 인터페이스에 변수가 없으면 위의 모순이 없습니다.
天蓬老师2017-04-17 17:32:02
상속은 객체가 가져야 할 특성(속성)과 행위(메서드)를 반영해야 한다고 생각합니다.
객체 지향 프로그래밍 관점에서 생각해 보세요.
상위 클래스는 하위 클래스의 모든 공통 특성과 동작을 수집합니다.
하위 클래스에는 상위 클래스의 모든 "공개" 기능과 동작이 있습니다.
이는 클래스 간의 계층 구조를 반영하고, 시스템 설명에서 코드를 사용하여 시스템을 설명하는 방식으로 전환하는 문제도 해결합니다.
위 내용은 순전히 저의 이해를 돕기 위한 것입니다. 오해의 여지가 있는 경우 조언을 받아주세요.
참고자료: 자바 프로그래밍 4판