JAVA/포스팅

자바 super

짜집퍼박사(짜박) 2023. 11. 11. 14:01

super는 자바에서 사용되는 특별한 키워드로, 주로 상속 관계에서 부모 클래스의 멤버에 접근하거나 부모 클래스의 생성자를 호출하는 데에 사용됩니다..

 

1. 부모 클래스의 멤버에 접근

super 키워드를 사용하여 부모 클래스의 멤버(필드 또는 메서드)에 접근할 수 있습니다. 이는 자식 클래스에서 동일한 이름의 멤버가 정의되어 있을 때 특히 유용합니다.

class Animal {
    String name = "동물";

    void eat() {
        System.out.println("동물이 먹습니다.");
    }
}

class Dog extends Animal {
    String name = "강아지";

    void display() {
        System.out.println(super.name); // 부모 클래스의 필드에 접근
        super.eat(); // 부모 클래스의 메서드 호출
        System.out.println("강아지가 먹습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.display();
    }
}

위의 예제에서 Dog 클래스에서 display 메서드에서 super.name을 사용하여 부모 클래스인 Animal 클래스의 name 필드에 접근하고, super.eat()을 사용하여 부모 클래스의 eat 메서드를 호출하고 있습니다.

 

2. 부모 클래스의 생성자 호출

super를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다. 이는 자식 클래스의 생성자에서 부모 클래스의 초기화를 수행하는 데에 사용됩니다.

class Animal {
    String name;

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

class Dog extends Animal {
    String breed;

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

위의 예제에서 Dog 클래스의 생성자에서 super(name)을 사용하여 부모 클래스인 Animal 클래스의 생성자를 호출하고 있습니다. 이렇게 함으로써 부모 클래스의 필드를 초기화할 수 있습니다.

 

3. super() vs this()

super()는 부모 클래스의 기본 생성자를 호출할 때 사용됩니다. 명시적으로 호출하지 않으면 자동으로 부모 클래스의 기본 생성자가 호출됩니다.

this()는 같은 클래스의 다른 생성자를 호출할 때 사용됩니다.

class Animal {
    String name;

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

    Animal() {
        this("이름 없음");
    }
}

class Dog extends Animal {
    String breed;

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

    Dog(String breed) {
        this(); // 같은 클래스의 다른 생성자 호출
        this.breed = breed;
    }
}

위의 예제에서 Dog 클래스에서 두 개의 생성자를 가지고 있습니다. 첫 번째 생성자는 부모 클래스의 생성자를 호출하고, 두 번째 생성자는 같은 클래스의 다른 생성자를 호출하고 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 패키지(package)  (0) 2023.11.11
자바 super()  (0) 2023.11.11
자바 오버로딩과 오버라이딩 차이  (0) 2023.11.10
자바 오버라이딩의 조건  (0) 2023.11.10
자바 오버라이딩이란  (0) 2023.11.10