개발 공부/Java | SpringBoot

[Java/ChatGPT] Day 9: 메서드 오버라이딩(Method Overriding)과 super 키워드

dev.jelee 2025. 6. 19. 02:55

[ 학습 목표 ]

  1. 메서드 오버라이딩 개념을 이해한다.
  2. 부모 클래스의 메서드를 자식 클래스에서 재정의하는 방법을 익힌다.
  3. super 키워드를 통해 부모 생성자 또는 메서드에 접근하는 방법을 배운다.

[ 이론 ]

1. 메서드 오버라이딩이란?

  • 부모 클래스의 메서드를 자식 클래스에서 재정의(덮어쓰기)하는 것.

 

2. 오버라이딩 조건

  • 메서드 이름, 매개변수, 반환 타입 모두 동일
  • 접근 제어자는 같거나 더 넓어야 함
  • @Override 어노테이션을 붙여서 오버라이딩임을 명확히 표시(권장)

 

3. Super 키워드란?

  • 부모 클래스의 필드, 메서드, 생성자에 접근할 때 사용
super.메서드(); // 부모의 메서드 호출
super(); // 부모의 생성자 호출 (생성자 안에서만 사용 가능)

 

4. 오버라이딩과 super 예시

public class Animal {
  void sound() {
    System.out.println("동물이 소리를 냅니다.");
  }
}
public class Dog extends Animal {
  @Override
  void sound() {
    System.out.println("멍멍!");
  }

  void callParentSound() {
    super.sound(); // 부모 클래스의 sound 메서드 호출
  }
}
public class Main {
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.sound();           // 멍멍!
    dog.callParentSound(); // 동물이 소리를 냅니다.
  }
}

 


[ 실습 ]

✅ 실습 1: Person, Student 클래스에 오버라이딩 적용

public class Person {
  String name;

  void introduce() {
    System.out.println("안녕하세요, 저는 " + name + "입니다.");
  }
}
public class Student extends Person {
  int studentId;

  @Override
  void introduce() {
    super.introduce(); // 부모의 introduce() 호출
    System.out.println("학번은 " + studentId + "입니다.");
  }
}
public class Main {
  public static void main(String[] args) {
    Student s = new Student();
    s.name = "김철수";
    s.studentId = 12345;

    s.introduce();  
    // 출력:
    // 안녕하세요, 저는 김철수입니다.
    // 학번은 12345입니다.
  }
}

[ 메모 ]

  • 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이다. 재정의라는 건 덮어쓰기
  • 오버라이딩 조건으로는
    • @Override 어노테이션을 명확히 표시해줘야 한다.
    • 메서드 이름, 매개변수, 변환 타입이 모두 동일해야한다.
    • 접근 제어자는 같거나 더 넓어야 한다.
  • super 키워드는 부모 클래스의 필드, 메서드, 생성자에 접근할 때 사용한다.
  • 사용은 메서드를 호출할 때에는 super.메서드(); / 생성자를 호출할 때에는 super(); 단, 생성자는 생성자 안에서만 사용 가능하다.