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. 주의 사항

  1. super()는 항상 생성자의 첫 번째 줄에서 호출해야 한다.첫 번째 줄이 아니면 컴파일 오류가 발생한다.
  2. class Example { Example() { super(); // 첫 줄에서 사용해야 함 } }
  3. 부모 클래스의 생성자를 명시적으로 호출하지 않으면 기본 생성자가 자동 호출된다.
    부모 클래스에 기본 생성자가 없는 경우, 명시적으로 생성자를 호출해야 한다.
  4. super는 정적(static) 컨텍스트에서는 사용할 수 없다.
    super는 객체를 기준으로 동작하기 때문에 정적 메서드나 블록에서는 사용할 수 없다.

실제 사용 이유

  • 코드 재사용: 부모 클래스의 초기화 로직을 자식 클래스에서 다시 작성하지 않아도 된다.
  • 확장성: 부모 클래스의 메서드나 필드를 활용하면서 자식 클래스에서 추가 기능을 구현할 수 있다.
728x90