Java Study
TIL - super() 에 대하여
초코너무조코
2024. 12. 23. 18:10
728x90
자바에서 super()는 부모 클래스의 생성자 또는 메서드를 호출할 때 사용된다. super 키워드는 자식 클래스가 부모 클래스의 기능을 확장하거나 수정할 때 중요한 역할을 한다.
1. 부모 클래스의 생성자 호출
super()를 사용하면 부모 클래스의 생성자를 호출할 수 있다. 부모 클래스의 초기화가 필요할 때 자식 클래스 생성자 내부에서 호출한다.
class Parent {
String name;
Parent(String name) {
this.name = name;
System.out.println("Parent 클래스 생성자 호출: " + name);
}
}
class Child extends Parent {
int age;
Child(String name, int age) {
super(name); // 부모 클래스 생성자 호출
this.age = age;
System.out.println("Child 클래스 생성자 호출: " + age);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child("Alice", 10);
}
}
출력:
Parent 클래스 생성자 호출: Alice
Child 클래스 생성자 호출: 10
2. 부모 클래스의 메서드 호출
super는 부모 클래스의 메서드를 호출할 때도 사용된다. 자식 클래스에서 메서드를 오버라이드했을 경우, super를 통해 부모의 원래 메서드를 호출할 수 있다.
class Parent {
void display() {
System.out.println("Parent 클래스의 display 메서드");
}
}
class Child extends Parent {
@Override
void display() {
System.out.println("Child 클래스의 display 메서드");
}
void callParentDisplay() {
super.display(); // 부모 클래스의 display 메서드 호출
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
child.callParentDisplay();
}
}
출력:
Child 클래스의 display 메서드
Parent 클래스의 display 메서드
3. 주의 사항
- super()는 항상 생성자의 첫 번째 줄에서 호출해야 한다.첫 번째 줄이 아니면 컴파일 오류가 발생한다.
- class Example { Example() { super(); // 첫 줄에서 사용해야 함 } }
- 부모 클래스의 생성자를 명시적으로 호출하지 않으면 기본 생성자가 자동 호출된다.
부모 클래스에 기본 생성자가 없는 경우, 명시적으로 생성자를 호출해야 한다. - super는 정적(static) 컨텍스트에서는 사용할 수 없다.
super는 객체를 기준으로 동작하기 때문에 정적 메서드나 블록에서는 사용할 수 없다.
실제 사용 이유
- 코드 재사용: 부모 클래스의 초기화 로직을 자식 클래스에서 다시 작성하지 않아도 된다.
- 확장성: 부모 클래스의 메서드나 필드를 활용하면서 자식 클래스에서 추가 기능을 구현할 수 있다.
728x90