상속을 통해 부모 클래스의 멤버를 자식 클래스에서 사용할 때, 부모 클래스와 자식 클래스의 멤버 이름이 충돌할 수 있다. 이때 구분하기 위해 사용되는 키워드가 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() 메소드는 부모 클래스의 생성자를 호출하는데 사용된다.
자식 클래스의 생성자에서 부모 클래스의 생성자를 명시적으로 호출할 때 사용한다.
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() 메소드를 호출하고 있다.