문제

Java는 여러 클래스의 상속을 허용하지 않습니다 (여전히 여러 인터페이스에서 상속을 허용 할 수 있습니다.), 나는 그것이 클래식 다이아몬드 문제와 매우 인라인이라는 것을 알고 있습니다. 그러나 내 질문은 왜 여러 기본 클래스에서 상속하는 동안 모호성이 없을 때 (따라서 다이아몬드 문제의 가능성이 없음) C ++와 같은 여러 상속을 허용하지 않는 이유는 무엇입니까?

도움이 되었습니까?

해결책

그것은 디자인 결정 자바의. 당신은 그것을 얻지 못할 것입니다. 그래서 그것에 대해 너무 걱정하지 마십시오. Mi가 Mixins를 만드는 데 도움이 될 수 있지만, 이것이 유일한 좋은 MI입니다.

다른 팁

나는 대부분의 프로그래머가 적절한 방식으로 여러 상속을 사용하지 않는다는 것을 읽었습니다. "그냥 가서 코드를 재사용하기 위해 클래스에서 물려 받으십시오"는 여러 상속의 경우 모범 사례가 아닙니다.

많은 프로그래머는 대부분의 경우 간단한 상속을 언제 사용 해야하는지 모릅니다. 여러 상속은주의해서 사용해야하며 좋은 디자인을 원한다면 무엇을하고 있는지 아는 경우에만 사용해야합니다.

Java (C ++에서와 같이)의 여러 상속이 부족하면 코드 / 애플리케이션 설계 / 문제 도메인 매핑에 클래스에 제한이 제한 될 것이라고 생각하지 않습니다.

Java가 다중 상속을 지원하면 Java의 다른 특징에 영향을 줄 수 있습니다.
슈퍼 클래스 생성자를 호출하는 데 사용되는 super () 메소드를 고려하십시오.

간단. 인용합니다 Tom Sintes,

Java Design 팀은 Java를 만들기 위해 노력했습니다.

  • 단순하고 물체 지향적이며 친숙합니다
  • 견고하고 안전합니다
  • 아키텍처 중립적이고 휴대용
  • 고성능
  • 해석, 나사산 및 동적

Java 언어에서 여러 상속을 생략 한 이유는 대부분 "단순하고 객체 지향적이며 친숙한"목표에서 비롯됩니다. 간단한 언어로서 Java의 제작자는 대부분의 개발자가 광범위한 훈련없이 이해할 수있는 언어를 원했습니다. 이를 위해 그들은 C ++의 불필요한 복잡성 (단순)을 운반하지 않고 가능한 C ++와 유사하게 언어를 만들기 위해 노력했습니다.

디자이너의 견해로는 여러 상속이 해결되는 것보다 더 많은 문제와 혼란을 일으 킵니다. 그래서 그들은 언어에서 여러 상속을 잘라냅니다 (연산자 과부하를 줄인 것처럼). 디자이너의 광범위한 C ++ 경험은 여러 상속이 두통의 가치가 없다고 가르쳤다.

Java 디자이너들은 그것을 결정했습니다. 인터페이스를 사용하여 다중 상속을 시뮬레이션 할 수 있습니다.

간단한 대답 중 하나는 Java의 모든 클래스가 java.lang.object IIRC에서 파생된다는 것입니다. 그래서 당신은 할 것입니다 언제나 다이아몬드 문제가 있습니다 ... : -D

Java가 여러 구현 상속 (IE 유형 인터페이스)을 지원하는 데 사용하지 않았다는 것은 사실입니다. 그것은 디자인 결정이었습니다.

그러나 Java 8이므로 기본 메소드를 사용하여 여러 상속을 지원합니다. 보다 http://docs.oracle.com/javase/tutorial/java/iandi/multipleinheritance.html:

구현의 다중 상속은 여러 클래스에서 메소드 정의를 상속하는 능력입니다. 이름 충돌 및 모호성과 같은 이러한 유형의 다중 상속에서 문제가 발생합니다. ... 기본 방법은 하나의 형태의 여러 상속 구현을 도입합니다.

다이아몬드 문제는 여러 학부모 클래스가 자신의 무언가의 구현을 정의 할 때 발생 하며이 둘의 아동 클래스는 사용할 구현의 모호성을 처리해야합니다. 따라서 Java의 모든 클래스가 Object에서 파생되면 단일 상위 클래스입니다. "단일 부모, 다중 파생 수업"은 "여러 부모, 단일 파생 수업"과 동일하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top