>Java >java지도 시간 >하위 클래스 생성자를 제거하면 Java에서 \'암시적 슈퍼 생성자 정의되지 않음\'이 발생하는 이유는 무엇입니까?

하위 클래스 생성자를 제거하면 Java에서 \'암시적 슈퍼 생성자 정의되지 않음\'이 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 06:24:18384검색

Why Does Removing Subclass Constructors Cause

Java 오류: 기본 생성자에 대해 암시적 슈퍼 생성자가 정의되지 않음

코드 중복을 줄이려는 시도에서 제거할 때 오류가 발생했습니다. 추상 클래스를 확장하는 하위 클래스의 생성자. 이 오류는 클래스에 명시적으로 정의된 생성자가 없을 때 Java 컴파일러에서 생성된 암시적 기본 생성자에서 발생합니다.

기본 생성자에는 인수가 없으며 public ACSubClass() { super(); }. 그러나 BaseClass가 생성자를 선언하므로 이 기본 생성자를 사용할 수 없으므로 컴파일 시간 오류가 발생합니다.

오류 원인:

이 문제는 Java의 상속 의미에 있습니다. 하위 클래스는 상위 클래스의 생성자를 자동으로 상속하지 않습니다. 하위 클래스가 생성자를 정의하지 않는 경우 상위 클래스에서 기본 생성자를 암시적으로 상속합니다.

해결책:

이 오류를 해결하려면 두 가지 주요 옵션이 있습니다. :

  • BaseClass에서 기본 생성자 정의: 제거 BaseClass의 명시적 생성자(예: public BaseClass(String someString) 제거)를 사용하여 기본 생성자를 활성화합니다.
  • 하위 클래스에 인수가 없는 명시적 생성자 제공: BaseClass에 인수가 필요한 경우 유효한 인스턴스인 경우 인수가 없는 명시적인 생성자를 하위 클래스에 추가할 수 있습니다. 예를 들어 ASubClass에서는 다음과 같습니다. public ASubClass() { super(null); }. 이렇게 하면 하위 클래스가 적절한 인수를 사용하여 super()를 호출할 수 있습니다.

주요 사항:

Java의 생성자 상속 규칙은 하위 클래스가 super()를 생성하지 못하도록 설계되었습니다. 부모 클래스의 잘못된 인스턴스. 기본 클래스와 하위 클래스 모두의 생성자 요구 사항을 신중하게 고려하면 누락되거나 부적절한 구문과 관련된 런타임 오류를 방지할 수 있습니다.

위 내용은 하위 클래스 생성자를 제거하면 Java에서 \'암시적 슈퍼 생성자 정의되지 않음\'이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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