>Java >java지도 시간 >Java에서 생성자가 상속되지 않는 이유는 무엇입니까?

Java에서 생성자가 상속되지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-29 22:39:11807검색

Why Are Constructors Not Inherited in Java?

Java의 생성자 상속 이해

대중의 기대에도 불구하고 Java에서는 생성자가 상속되지 않습니다. 이러한 디자인 결정은 개발자들 사이에 호기심과 의문을 불러일으켰습니다.

생성자의 비상속 이유

다음 예를 고려하세요.

public class Super {
  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 
}

생성자가 상속된 경우 궁극적으로 Object에서 파생된 클래스를 포함하여 모든 클래스는 매개 변수가 없는 생성자를 갖게 됩니다. 이는 특히 다음과 같은 경우 논리적 딜레마를 야기합니다.

FileInputStream stream = new FileInputStream();

지정된 매개변수 없이 이 줄은 어떤 작업을 수행해야 합니까?

비상속의 장점

생성자 상속이 없기 때문에 하위 클래스는 인스턴스화를 위해 특정 매개변수를 요구하며, 이는 하위 클래스에서 요구하는 매개변수와 다를 수 있습니다. 슈퍼클래스. 이렇게 하면 객체를 생성할 때 의도하지 않거나 일관되지 않은 동작을 방지할 수 있습니다.

대체 솔루션

반복 및 DRY 문제를 해결하기 위해 Java에서는 명시적인 "통과" 생성을 허용합니다. 다음과 같이 매개변수를 슈퍼클래스 생성자에 전달하는 하위 클래스의 생성자:

public class Son extends Super{
  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }
}

이 접근 방식은 일부를 추가하지만 중복성 때문에 객체 인스턴스화에 대한 명확성과 제어를 우선시하여 존재하지 않는 상속 생성자를 효과적으로 대체합니다.

위 내용은 Java에서 생성자가 상속되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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