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

Java가 생성자를 상속하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-05 03:26:10
원래의
930명이 탐색했습니다.

Why Doesn't Java Inherit Constructors?

Java 생성자 상속: 수수께끼 풀기

Java에서 클래스의 생성자는 하위 클래스에 상속되지 않습니다. 이 설계 선택은 오랜 질문을 불러일으켰습니다. Java가 왜 이런 접근 방식을 취하는가?

다음 클래스를 고려하십시오.

public class Super {

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

}
로그인 후 복사

하위 클래스 Son이 Super에서 상속되면 Java는 다음을 요구합니다. 생성자는 Super와 동일한 매개변수를 사용하여 Son에서 명시적으로 선언됩니다. 이는 아래에 설명된 것처럼 반복적인 코드로 이어질 수 있습니다.

public class Son extends Super{

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

}
로그인 후 복사

이러한 반복은 다음과 같은 질문을 촉발합니다. Java가 생성자의 상속을 금지하는 이유는 무엇입니까?

답은 다음과 같은 잠재적인 결과에 있습니다. 계승. 생성자가 상속된 경우 모든 클래스는 결국 기본 클래스 Object에서 생성자를 상속하게 됩니다. 이는 목적에 관계없이 모든 클래스가 매개변수 없는 생성자를 갖게 된다는 의미입니다.

이러한 디자인은 모호함을 야기합니다. 예를 들어, 다음 코드는

FileInputStream stream = new FileInputStream();
로그인 후 복사

어떤 매개변수가 생성자에 전달되어야 하는지 의문을 남깁니다. 클래스마다 서로 다른 매개변수가 필요할 수 있으므로 이러한 상속은 매우 비현실적입니다.

통과 생성자(단순히 슈퍼클래스 생성자를 호출하는 생성자)가 유용한 시나리오가 있지만 Java는 현명하게도 이를 기본 동작으로 설정하지 않기로 결정했습니다. . 서브클래스 생성에 필요한 다양한 매개변수로 인해 각 클래스에서 생성자를 명시적으로 선언해야 합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿