반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- vscode
- replace
- list
- 문자열
- 정규식
- Array
- input
- map
- 자바문법
- js
- html
- 이탈리아
- 자바
- 이클립스
- 배열
- 인텔리제이
- Visual Studio Code
- string
- table
- json
- IntelliJ
- Eclipse
- 자바스크립트
- CSS
- HashMap
- Java
- ArrayList
- javascript
- date
- math
Archives
- Today
- Total
어제 오늘 내일
[Java] 부모 생성자 호출 (super()) 본문
Java에서 자식클래스는 객체가 생성될 때 반드시 부모클래스의 생성자를 먼저 호출합니다.
이를 위해 사용하는 문법이 바로 super()입니다. 부모 생성자 호출은 상속 관계에서 객체가 올바르게 초기화되도록 만드는 중요한 과정입니다.
1. 부모 생성자 호출의 기본 개념
자식클래스의 생성자가 실행되기 전에
부모클래스의 생성자가 먼저 호출되어야 한다는 것이 Java의 규칙입니다.
자식 생성자 안에서 명시적으로 부모 생성자를 호출하지 않더라도, Java는 자동으로 super()를 첫 줄에 삽입합니다.
예:
class Parent {
Parent() {
System.out.println("Parent 생성자");
}
}
class Child extends Parent {
Child() {
System.out.println("Child 생성자");
}
}
new Child();
출력:
Parent 생성자
Child 생성자
설명
- Child 생성자보다 Parent 생성자가 먼저 실행됨
2. super()로 부모 생성자 명시적으로 호출하기
부모 생성자에 매개변수가 있는 경우, 자식은 반드시 super(값) 형태로 부모 생성자를 직접 호출해야 합니다.
class Parent {
Parent(String msg) {
System.out.println("Parent: " + msg);
}
}
class Child extends Parent {
Child() {
super("Hello"); // 부모 생성자 호출
System.out.println("Child 생성자");
}
}
출력:
Parent: Hello
Child 생성자
설명
- 부모에 기본 생성자가 없기 때문에 super()를 반드시 작성해야 함
3. super()는 반드시 생성자의 첫 번째 문장
Java 규칙상, super()는 생성자에서 가장 첫 줄에 작성되어야 합니다.
Child() {
System.out.println("start"); // ❌ 오류
super(); // ❌ 첫 줄이 아님
}
올바른 형태:
Child() {
super(); // ✔
System.out.println("start");
}
4. 부모 생성자가 여러 개 있을 때
부모가 생성자를 여러 개 제공한다면, 자식 생성자는 원하는 부모 생성자를 선택하여 호출할 수 있습니다.
class Parent {
Parent() { }
Parent(int x) { }
}
class Child extends Parent {
Child() {
super(10); // 두 번째 생성자 선택
}
}
5. super() 없이 부모 생성자가 호출되는 경우
부모클래스에 기본 생성자가 있을 때만 자동 호출이 가능합니다:
class Parent {
Parent() { }
}
class Child extends Parent {
Child() { } // super() 자동 삽입
}
하지만 아래처럼 부모에 기본 생성자가 없으면 오류 발생:
class Parent {
Parent(int x) { }
}
class Child extends Parent {
Child() { } // ❌ 오류: super(int) 필요
}
6. 전체 예제
class Parent {
Parent() {
System.out.println("부모 기본 생성자");
}
Parent(String msg) {
System.out.println("부모: " + msg);
}
}
class Child extends Parent {
Child() {
super("전달 메시지");
System.out.println("자식 생성자");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
출력:
부모: 전달 메시지
자식 생성자
7. 정리
- 자식클래스 생성자 실행 전 반드시 부모 생성자가 먼저 호출됨
- 부모 생성자는 super()로 호출
- super()는 생성자의 첫 줄에 있어야 함
- 부모에 기본 생성자가 없는 경우 반드시 명시적으로 super(매개변수)를 작성해야 함
반응형
'IT > Java' 카테고리의 다른 글
| [Java] 상속(Inheritance)과 오버라이딩(Overriding) (0) | 2025.12.21 |
|---|---|
| [Java] 상속, 부모클래스, 자식클래스 (0) | 2025.12.20 |
| [Java] 접근제어 (public, private, protected, default) (0) | 2025.12.20 |
| [Java] void 메소드 호출 (0) | 2025.12.19 |
| [Java] void 뜻 (0) | 2025.12.19 |
Comments
