프로그래밍/JAVA

58. super 키워드로 부모 메서드 호출하기 (오버라이딩 활용)

설매향 2025. 5. 2. 14:53
반응형

이번 글에서는 자식 클래스에서 오버라이딩한 메서드 내부에서
super 키워드를 사용해 부모 클래스의 메서드를 호출하는 방법을 학습합니다.
이 기법은 조건에 따라 부모 메서드를 그대로 유지하거나,
자식 메서드의 동작을 선택적으로 확장/대체할 때 유용합니다.


📦 부모 클래스 코드 (Airplane.java)

package ch07.sec04.exam02;

public class Airplane {
	public void land() {
		System.out.println("착륙합니다.");
	}

	public void fly() {
		System.out.println("일반 비행합니다.");
	}

	public void takeOff() {
		System.out.println("이륙합니다.");
	}
}

📦 자식 클래스 코드 (SupersonicAirplane.java)

package ch07.sec04.exam02;

public class SupersonicAirplane extends Airplane {
	public static final int NORMAL = 1;
	public static final int SUPERSONIC = 2;
	public int flyMode = NORMAL;

	public void fly() {
		if (flyMode == SUPERSONIC)
			System.out.println("초음속 비행합니다.");
		else
			super.fly(); // 부모의 fly() 호출
	}
}

📌 실행 코드 (SupersonicAirplaneExample.java)

package ch07.sec04.exam02;

public class SupersonicAirplaneExample {
	public static void main(String[] args) {
		SupersonicAirplane sa = new SupersonicAirplane();
		sa.takeOff(); // 부모 메서드
		sa.fly();     // 일반 비행
		sa.flyMode = SupersonicAirplane.SUPERSONIC;
		sa.fly();     // 초음속 비행
		sa.flyMode = SupersonicAirplane.NORMAL;
		sa.fly();     // 다시 일반 비행
		sa.land();    // 부모 메서드
	}
}

💬 코드 설명

  • fly() 메서드 오버라이딩
    → flyMode 값에 따라 다르게 동작
  • flyMode == NORMAL
    → super.fly()로 부모의 일반 비행 호출
  • flyMode == SUPERSONIC
    → 자식 클래스에서 새로운 메시지 출력 (초음속 비행)
  • 나머지 메서드(takeOff(), land())는 부모 메서드 그대로 사용

💻 실행 결과

이륙합니다.
일반 비행합니다.
초음속 비행합니다.
일반 비행합니다.
착륙합니다.

📌 간단 정리

flyMode 값 fly() 출력 결과
NORMAL 일반 비행합니다. (super.fly())
SUPERSONIC 초음속 비행합니다.

💡 포인트 정리

  • 오버라이딩한 메서드 내부에서 super.메서드()를 사용하면
    부모 클래스의 원래 메서드를 직접 호출할 수 있음
  • 조건문과 결합하면 기존 동작 유지 + 확장된 동작 구현이 가능
  • 코드 재사용성과 가독성이 향상되고, 유연한 구조 설계 가능
  • super는 부모의 필드나 메서드를 명시적으로 호출할 때 사용