반응형
1. 메소드 오버라이딩 : 상속된 메소드의 내용이 자식 클래스에 적합하지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의 하는 것
- 메소드가 오버라이딩되면 부모 객체의 메소드는 숨겨지고 자식 객체에서 메소드를 호출했을 때 오버라이딩된 자식 메소드가 호출됨
| 메소드 오버라이딩 규칙 |
| 부모의 메소드와 동일한 시그니처 (리턴 타입, 메소드 이름, 매개 변수 리스트)를 가져야 함 |
| 접근 제한을 더 강하게 오버라이딩 할 수 없음 |
| 새로운 예외 (Exception)를 throw 할 수 없음 |
- 부모 메소드가 public이면 자식 메소드는 default, private 접근 제한으로 수정 불가능
- 부모 메소드가 default이면 자식 메소드는 default 또는 public 접근 제한을 가질 수 있음
2. 부모 메소드 호출 (super)
- 자식 클래스 내부에서 오버라이딩된 부모 클래스의 메소드를 호출해야 하는 상황이 발생한다면 명시적으로 super키워드를 붙여서 부모 메소드를 호출 가능
- super는 부모 객체를 참조하기 때문에 부모 메소드에 접근 가능
public class Airplane {
public void land() {
System.out.println("착륙");
}
public void fly() {
System.out.println("일반 비행");
}
public void takeOff() {
System.out.println("이륙");
}
}
public class SupersonicAirplane extends Airplane {
public static final int NORMAL = 1;
public static final int SUPERSONIC = 2;
public int flyMode = NORMAL;
@Override
public void fly() {
if (flyMode == SUPERSONIC) {
System.out.println("초음속 비행");
} else {
// Airplane 객체의 fly() 메소드 호출
super.fly();
}
}
}
public class Example {
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(); // 착륙
}
}반응형
'언어 > Java' 카테고리의 다른 글
| 인터페이스 (1) | 2023.08.27 |
|---|---|
| 클래스의 타입 변환과 다형성 (0) | 2023.08.27 |
| 상속 (0) | 2023.08.24 |
| 어노테이션 (0) | 2023.08.24 |
| Getter와 Setter (0) | 2023.08.23 |