>  기사  >  Java  >  자바에 다중상속이 없는 이유

자바에 다중상속이 없는 이유

(*-*)浩
(*-*)浩원래의
2019-05-21 11:44:512581검색

Java는 단일 상속만 지원하며 다중 상속을 허용하지 않습니다. 단일 상속은 클래스가 하나의 상위 클래스만 가질 수 있음을 의미하고 다중 상속은 클래스가 여러 개의 상위 클래스를 가질 수 있음을 의미합니다.

자바에 다중상속이 없는 이유

Java는 여러 수준의 상속을 가질 수 있습니다. 즉, 클래스는 특정 클래스의 하위 클래스를 상속할 수 있습니다. 예를 들어 클래스 B는 클래스 A를 상속하고, 클래스 C는 클래스 B를 상속할 수 있으며, 클래스 C도 클래스를 간접적으로 상속할 수 있습니다. A.

하위 클래스는 상위 클래스의 모든 멤버 변수와 메서드를 상속할 수 있지만 하위 클래스는 상위 클래스의 생성자 메서드를 상속할 수 없습니다. 하위 클래스의 생성자에서 super(매개변수 목록) 문을 사용하여 상위 클래스의 생성자를 호출할 수 있습니다.

클래스는 속성과 메소드를 정의하고 특정 유형의 추상화를 설명합니다.

논리적으로 말하면 상속만으로도 하위 클래스는 상위 클래스가 나타내는 항목의 보다 구체적인 범주여야 하며, 아니 이런 저런 일이 있군요
그리고 실용적인 관점에서 볼 때 단일 상속은 읽기 쉽고 유지 관리도 쉽고 의미도 명확하고 논리도 명확합니다

다중 상속으로 인해 발생하는 문제. 다이아몬드 위기:

  A foo()
       / \
      /   \
  B foo()   C foo()
      \   /
       \ /
      D foo()

클래스 A에 공개 메소드 fun()이 있고 클래스 B와 클래스 C가 동시에 클래스 A를 상속하고 클래스 B 또는 클래스 C가 각각 fun()을 재정의하고 클래스 D가 있다고 가정합니다. B와 클래스 C는 다중 상속을 통해 동시에 상속되며, 이로 인해 프로그램이 실행될 때 해당 메소드 fun()을 어떻게 결정합니까?

class A{
    public void foo(){
    }
}
class B extends A{
    public void foo(){
    }
}
class C extends A{
    public void foo(){
    }
}
//Not allowed here.
public class D extends B, C{
    public void foo(){
    }
}

(1) 하위 클래스에서 상속된 여러 상위 클래스에 동일한 이름을 가진 인스턴스 변수가 있는 경우 하위 클래스는 변수를 참조할 때 모호성을 갖게 되며 어떤 상위 클래스 변수를 사용해야 하는지 결정할 수 없습니다.

(2) 하위 클래스에서 상속된 여러 상위 클래스에 동일한 메서드가 있고 해당 메서드가 하위 클래스에서 재정의되었는지 여부에 따라 메서드를 호출할 때 모호성이 발생하며 어떤 상위 클래스 메서드를 사용해야 하는지 결정할 수 없습니다. 호출됩니다.

위 내용은 자바에 다중상속이 없는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.