>Java >java지도 시간 >생성자에서 `super()`가 실제로 필요한 경우는 언제인가요?

생성자에서 `super()`가 실제로 필요한 경우는 언제인가요?

DDD
DDD원래의
2024-10-31 03:43:30239검색

 When is `super()` Really Necessary in a Constructor?

생성자의 Super(): 필요성에 대한 질문

객체 지향 프로그래밍 영역에서 생성자는 초기화에 중요한 역할을 합니다. 새로 생성된 객체. 그러나 질문이 생깁니다. 하위 클래스 생성자 내에서 super() 메서드를 명시적으로 호출하는 것이 필수입니까?

자동 호출

명시적인 super( ) 호출을 수행하면 컴파일러는 슈퍼클래스에서 액세스 가능한 인수 없는 생성자를 자동으로 호출합니다. 이 생성자는 매개변수가 없으며 슈퍼클래스의 인스턴스 멤버를 적절하게 초기화하는 데 필수적입니다.

인수가 있는 생성자

하위 클래스의 생성자가 인수를 포함하는 경우 일반적으로 초기화 작업을 다음 사용자에게 위임합니다. 일치하는 인수 목록이 있는 슈퍼클래스의 생성자. 일치하는 생성자가 없으면 오류가 발생합니다. 즉, super()를 통해 호출되는 생성자에는 하위 클래스의 생성자에 전달된 인수와 정확히 일치하는 인수가 있어야 합니다.

접근성의 중요성

액세스 가능한 no- 슈퍼클래스의 args 생성자는 서브클래스에서 볼 수 있어야 합니다. 슈퍼클래스 생성자가 비공개이거나 보호된 경우 올바른 생성자를 호출하려면 적절한 인수를 사용하여 super()를 명시적으로 호출해야 합니다.

이러한 개념을 설명하려면 , 다음 코드 조각을 고려하세요.

<code class="java">public class Base { // No-args constructor } public class Derived extends Base { // Default constructor will be invoked by the compiler }</code>

이 경우 Derived 인스턴스가 생성될 때 Base의 기본 생성자가 자동으로 호출됩니다.

<code class="java">public class Base { public Base(int i) { } } public class Derived extends Base { public Derived(int i) { super(i); } }</code>

여기서 생성자는 in Derived는 i 인수를 사용하여 Base에서 일치하는 생성자를 명시적으로 호출합니다.

<code class="java">public class Base { private Base() { } } public class Derived extends Base { } // Error: no accessible no-args constructor in superclass</code>

Base의 생성자가 비공개이고 하위 클래스에 액세스할 수 없기 때문에 이 코드에서는 오류가 발생합니다.

결론적으로, 컴파일러는 슈퍼클래스에서 액세스 가능한 인수 없는 생성자를 자동으로 호출하지만 하위 클래스의 생성자에 인수가 있거나 슈퍼클래스의 생성자에 액세스할 수 없는 경우 명시적인 super() 호출이 필수적입니다. Java에서 적절한 객체 초기화를 보장하려면 이러한 미묘한 차이를 이해하는 것이 중요합니다.

위 내용은 생성자에서 `super()`가 실제로 필요한 경우는 언제인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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