자바에서의 super 와 super() 메소드

JH·2024년 2월 7일

java

목록 보기
4/21

상속을 통해 부모 클래스의 멤버를 자식 클래스에서 사용할 때, 부모 클래스와 자식 클래스의 멤버 이름이 충돌할 수 있다. 이때 구분하기 위해 사용되는 키워드가 super다. 또한 super() 메소드는 부모 클래스의 생성자를 호출하는데 사용된다.

super

super 는 부모 클래스의 멤버와 자식 클래스의 멤버를 구분하는 데 사용된다.
만약 부모 클래스와 자식 클래스의 멤버 이름이 같은 경우, super 를 사용하여 부모 클래스의 멤버에 접근할 수 있다.

class Parent {
    int x = 10;
}

class Child extends Parent {
    int x = 20;

    void display() {
        System.out.println("Child class: " + x); // 자식 클래스의 멤버 x 출력
        System.out.println("Parent class: " + super.x); // 부모 클래스의 멤버 x 출력
    }
}

super() 메소드

super() 메소드는 부모 클래스의 생성자를 호출하는데 사용된다.
자식 클래스의 생성자에서 부모 클래스의 생성자를 명시적으로 호출할 때 사용한다.

class Parent {
    Parent() {
        System.out.println("Parent class constructor");
    }
}

class Child extends Parent {
    Child() {
        super(); // 부모 클래스의 생성자 호출
        System.out.println("Child class constructor");
    }
}

부모 클래스의 생성자는 자식 클래스의 생성자보다 먼저 호출되며, 이를 통해 부모 클래스의 필드를 초기화할 수 있다.

예제

다음은 super 와 super() 메소드를 사용한 예제 코드이다.

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    void display() {
        System.out.println("Name: " + name);
    }
}

class Dog extends Animal {
    String breed;

    Dog(String name, String breed) {
        super(name); // 부모 클래스의 생성자 호출
        this.breed = breed;
    }

    void display() {
        super.display(); // 부모 클래스의 display() 메소드 호출
        System.out.println("Breed: " + breed);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy", "Golden Retriever");
        dog.display();
    }
}

위의 예제에서는 Animal 클래스를 상속하여 Dog 클래스를 정의하고 있다. Dog 클래스의 생성자에서는 super(name)을 사용하여 부모 클래스의 생성자를 호출하고 있다. 또한 display() 메소드에서는 super.display()를 사용하여 부모 클래스의 display() 메소드를 호출하고 있다.

profile
발전하는 백엔드 개발자

0개의 댓글