왜 자바는 다중 계승을 할 수 없습니까?

3773 단어 Javatech
이 글은 스택 오버플로우Teratail의 질문에 대한 대답을 기록한 것이다.
언어 디자인 시 선택으로 단순도(Simple)를 선택한 결과죠.
자바의 친부모James Gosling가 1995년 발간한 화이트페이퍼"Java: an Overview"를 인용했다.
Simple
JAVA omits many rarely used, poorly understood, confusing features of C++ that in our experience bring more grief than benefit. This primarily consists of operator overloading (although it does have method overloading), multiple inheritance, and extensive automatic coercions.
다중상속이 가리키는 범위는'상태 다중상속','실장 다중상속','유형 다중상속'으로 나눌 수 있다.
공식 The Java TutoralsMultiple Inheritance of State, Implementation, and Type에서도 언급했듯이
  • 상태(state)의 다중 계승: 언어규범상의 선택이 지원되지 않음
  • 실현된 다중 계승: 자바 8에 도입된 기본 방법에서 지원
  • 유형의 다중 상속: 인터페이스 상속 지원
  • White Paper에서 언급한 C++ 언어의 경우 이미 정해진 동작에서 상태(state)의 다중 계승으로 인해 여러 부류의 상태가 존재한다.
    이를 회피하는 기구로서 가상 계승(virtual inheritance)이라는 언어 기능을 제공하는 옵션은 비교적 복잡하고 이해하기 어려운 기능이다.C++는 프로그래머에게 선택의 자유를 줄 수 있지만 복잡하고 이해하기 어려운 것도 사실이다.
    // C++言語における「状態(state)の多重継承」
    
    class B { int m1; };
    // クラスD1,D2ともにクラスBを継承
    class D1 : public B { ... };
    class D2 : public B { ... };
    
    // D1,D2を多重継承したクラスXのインスタンスには
    // 親クラスBのインスタンスが 2 つ含まれる。
    // つまりm1変数という「状態」が2つ同時に存在する。
    class X : public D1, D2 {};
    
    자바 언어에서 프로그래머가 이런 어려운 선택을 하지 못하게 하는 사상이 있다.

    좋은 웹페이지 즐겨찾기