super, super()

jiiiiiiiArchive.·2025년 1월 14일

🤯지식주머니🤯

목록 보기
64/98

super : 부모 클래스의 멤버를 참조

  • 자식 클래스에서 부모 클래스의 인스턴스 변수(필드)나 메서드를 참조할 때 사용
  • 자식 클래스에서 부모 클래스의 필드나 메서드에 접근하고자 할 때 사용
class Animal {
    String name = "Animal";
    
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    String name = "Dog";
    
    void printName() {
        // 부모 클래스의 name을 참조
        System.out.println("Parent name: " + super.name);  // Animal
        // 자식 클래스의 name을 참조
        System.out.println("Child name: " + this.name);  // Dog
    }
    
    void sound() {
        super.makeSound();  // 부모 클래스의 메서드 호출
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.printName();  // Parent name: Animal, Child name: Dog
        dog.sound();      // Animal makes a sound, Dog barks
    }
}

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();  // Animal 생성자 호출, Dog 생성자 호출
        System.out.println();
        Dog dog2 = new Dog("Buddy");  // Animal(Buddy) 생성자 호출, 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 + "}");
       // Parent class : {대전광역시, 20}
       System.out.println("Child cLass : {" + super.addr + ", " + super.age + "}");
       // Child class : {대전광역시 유성구, 30}
  	}
}

public class Inheritance {
    public static main(String[] args) {
        Child child = new Child("대전광역시", 20);
        child.search();
    }
}
profile
이것저것 다 적는 기록장📚

0개의 댓글