는 클래스 D 가정 및 E와 F는 모두 기본 클래스 B에서 상속, 그 클래스 C는 D와 E다이아몬드 상속
에서 상속매수를 클래스 B의이 클래스 C에 표시 (I)?
(ii) 어떻게 가상 상속을 사용하면이 시나리오가 바뀔까요? 귀하의 답변을 설명하십시오.
(iii) 많은 경우 C++에서 다중 상속이 사용될 수있는 상황에서 Java가 다중 상속을 피할 수 있습니까?
여기 현재 제 아이디어 중 일부는 있지만, C++ 전문가는 아닙니다.
(i)
C가 B의 하위 클래스 인 D와 E를 상속하는 경우 D와 E는 기술적으로 수퍼 클래스 사본입니까? 그렇다면 C가 D와 E에서 상속하면 C에 B가 2 개 있다는 것을 의미합니다.
(ii)
가상을 사용하는 것은 Java에서 Abstract를 사용하는 것과 다소 비슷합니다. 이제는 인스턴스화가 필요한 수준까지 계단식으로 배치되므로 C에 B가 여러 개 없을 것입니다. 나는 내 설명에 단어를 쓰는 방법을 모르지만 B에 print()라는 함수가 있고 "나는 B"이고 C는이 함수를 덮어 쓰고 "나는 C"라고 쓰여 있다고 말합니다. 가상 (virtual)을 사용하지 않고 C에서 print()를 호출하면 "i am B"가 인쇄되고 가상을 사용하면 "i am C"가 인쇄됩니다.
(iii)
제 아이디어는 자바가 다중 상속의 사용을 피하기 위해 인터페이스를 사용할 수 있다는 것입니다. 여러 인터페이스를 구현할 수 있지만 하나의 클래스 만 확장 할 수 있습니다. 여기에 추가 할 항목이 무엇인지 확실하지 않으므로 입력이나 관련 리소스가 도움이됩니다.
+1 "나는 도움이 필요하지만 내가 시도한 것을 털어 놓는다."라는 질문의 훌륭한 예입니다. 질문 – yizzlez
'(ii)'에 대한 짧은 대답은 B 복사본이 하나 밖에 없다는 것입니다. 더 – yizzlez
+1, 이것은 또한 당신을 도울지도 모른다 : http://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem –