super : 부모 클래스의 멤버를 참조
- 자식 클래스에서 부모 클래스의 인스턴스 변수(필드)나 메서드를 참조할 때 사용
- 자식 클래스에서 부모 클래스의 필드나 메서드에 접근하고자 할 때 사용
class Animal {
String name = "Animal";
void makeSound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
String name = "Dog";
void printName() {
System.out.println("Parent name: " + super.name);
System.out.println("Child name: " + this.name);
}
void sound() {
super.makeSound();
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.printName();
dog.sound();
}
}
super() : 부모 클래스의 생성자 호출
- 부모 클래스의 생성자가 명시적으로 정의되지 않은 경우 자식 클래스 생성자에서는 컴파일러가 자동으로 super() 호출
- 반드시 자식 클래스 생성자의 첫 번째 줄에 위치해야 함
- 부모 클래스에 매개변수가 있는 생성자가 있을 경우 해당 생성자를 호출하려면 super(매개변수)와 같이 매개변수를 전달해야 함
class Animal {
String name;
Animal() {
this.name = "Animal";
System.out.println("Animal 생성자 호출");
}
Animal(String name) {
this.name = name;
System.out.println("Animal(" + name + ") 생성자 호출");
}
}
class Dog extends Animal {
Dog() {
super();
System.out.println("Dog 생성자 호출");
}
Dog(String name) {
super(name);
System.out.println("Dog(" + name + ") 생성자 호출");
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
System.out.println();
Dog dog2 = new Dog("Buddy");
}
}

this() VS super()
- this() : 같은 클래스의 다른 생성자를 호출할 경우
- super() : 자식 클래스에서 부모 생성자를 호출할 경우
class Parent {
public String addr;
public int age;
public Parent(String addr, int age) {
this.addr = addr;
this.age = age;
}
}
class Child extends Parent {
public String addr;
public int age;
public Child(String addr, int age) {
super(addr + " 유성구", age + 10);
this.addr = addr;
this.age = age;
}
void search () {
System.out.println("Parent cLass : {" + addr + ", " + age + "}");
System.out.println("Child cLass : {" + super.addr + ", " + super.age + "}");
}
}
public class Inheritance {
public static main(String[] args) {
Child child = new Child("대전광역시", 20);
child.search();
}
}