[JAVA] 상속 super 키워드와 super() 메서드

super 키워드 역할

상속 관계에서 부모 클래스의 멤버에 접근하고 활용하는데 사용됩니다.

자식 클래스에서 동일한 이름의 멤버 변수가 있을 경우, super 키워드를 통해 부모 클래스의 멤버 변수에 접근할 수 있음을 의미합니다.

자식 클래스에서 오버라이딩을 하고 super 키워드를 사용하면 부모 클래스의 기능(메서드)을 확장할 수 있습니다.

 

super 키워드 멤버변수 예제

class Parent {
    String name = "부모";
}

class Child extends Parent {
    String name = "자식";

    public void show() {
        System.out.println(name); // 자식
        System.out.println(this.name); // 자식
        System.out.println(super.name); // 부모
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();
    }
}

super 키워드 메서드 예제

class Parent {
    public void show() {
        System.out.println("부모");
    }
}

class Child extends Parent {
    @Override
    public void show() {
        super.show(); // 부모
        System.out.println("자식"); // 자식
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show();
    }
}

super() 역할

자식 클래스의 생성자에서 부모 클래스의 생성자를 호출합니다. 이를 통해 자식 클래스에서 부모 클래스의 초기화를 호출하는 역할을 수행합니다. 그러면서 자식 클래스가 생성될 때 필요한 초기화가 원활하게 이루어집니다. 부모 클래스의 생성자에 전달할 인수를 포함할 수 있습니다.

 

super() 예제

class Parent {
    String name;

    Parent(String name) {
        this.name = name;
        System.out.println("부모 생성자 호출");
    }
}

class Child extends Parent {
    String name;

    Child(String parentName, String childName) {
        super(parentName);
        this.name = childName;
        System.out.println("자식 생성자 호출");
    }

    void show() {
        System.out.println(super.name);
        System.out.println(this.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child("부모", "자식");
        child.show();
    }
}

부모 클래스에서 name을 가지고 있는 생성자를 정의하고, 자식 클래스에서 super()를 통하여 부모 클래스를 호출하여 name을 초기화합니다.