프로그래밍/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는 부모의 필드나 메서드를 명시적으로 호출할 때 사용