부모 메소드 호출
메소드를 재정의하면 부모클래스의 해당 메소드는 숨겨지고, 재정의된 자식 메소드만 사용된다.
그러나 자식 클래스 내부에서 재정의된 부모 클래스의 메소드를 호출해야 할 때는 super() 키워드를 붙여서 부모 메소드를 호출 할 수 있다.
super.부모메소드();
class Parents{
①void method1() {...}
②void method2() {...}
}
class Child extends Parents {
@Override
③void method2() {..재정의된 내용..}
④void method3() {
method2(); =>③
super.method2(); =>②
}
}
예시
//부모클래스
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;
//자주 사용되는 고정값들은 상수를 사용 => 가독성 up
public int flyMode = NORMAL;
@Override
public void fly() {
if(flyMode == SUPERSONIC) {
System.out.println("초음속 비행을 합니다.");
}else {
super.fly();
//부모클래스 (Airplane)의 객체 안에 있는 fly() 메소드를 호출
}
}
}
public class SupersonicAirplaneEx {
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();
}
}
실행결과:
이륙합니다.
비행합니다.
초음속 비행을 합니다.
비행합니다.
착륙합니다.