super
키워드는 부모 클래스의 멤버(필드나 메서드)에 접근할 때 사용한다. 자식 클래스가 부모 클래스의 메서드를 오버라이드(재정의)했을 때, 부모 클래스의 원래 메서드를 호출하거나 부모 클래스의 생성자를 명시적으로 호출하고 싶을 때 사용한다.
class Animal {
public void sound() {
System.out.println("Animal makes a sound.");
}
}
class Dog extends Animal {
@Override
public void sound() {
// 부모 클래스의 메서드를 호출하고, 추가적으로 동작 정의
super.sound(); // Animal makes a sound.
System.out.println("Dog barks.");
}
}
public class SuperExample1 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound(); // Animal makes a sound. Dog barks.
}
}
Animal makes a sound.
Dog barks.
super.sound()
: 자식 클래스에서 부모 클래스의 sound()
메서드를 호출.super()
를 사용하여 부모 클래스의 생성자를 명시적으로 호출할 수 있다. 자식 클래스의 생성자에서는 기본적으로 부모 클래스의 기본 생성자가 자동으로 호출되지만, 매개변수가 있는 생성자를 호출할 때는 super()
를 명시적으로 사용해야 한다.
class Animal {
String name;
// 부모 클래스 생성자
public Animal(String name) {
this.name = name;
}
}
class Dog extends Animal {
String breed;
// 자식 클래스 생성자
public Dog(String name, String breed) {
super(name); // 부모 클래스의 생성자 호출
this.breed = breed;
}
public void showInfo() {
System.out.println(name + " is a " + breed);
}
}
public class SuperExample2 {
public static void main(String[] args) {
Dog dog = new Dog("Buddy", "Golden Retriever");
dog.showInfo(); // Buddy is a Golden Retriever
}
}
super(name)
는 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출.