Self Study Java
[Java - 상속에서의 메소드 오버라이딩(Method Overriding)]
Jelly-fish
2023. 9. 13. 22:44
부모 클래스 - Airplane
package sec01.exam04;
public class Airplane
{
public void land()
{
System.out.println("착륙합니다.");
}
public void fly()
{
System.out.println("일반비행합니다.");
}
public void takeOff()
{
System.out.println("이륙합니다.");
}
}
자식 클래스 - SupersonicAirplane
package sec01.exam04;
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()
{
// flyMode == SUPERSONIC 일 때만 Override 할게요!
if(flyMode == SUPERSONIC)
{
System.out.println("초음속비행합니다.");
}
// flyMode가 SUPERSONIC이 아닌 다른 상황이면?
// Overriding 안 하고, 원래 부모의 메소드 사용할게요!
else
{
super.fly();
}
}
}
if 문의 조건이 true일 때만 메소드의 오버라이딩(`Method Overriding`)이 이루어지기 때문이다!
만약, else의 조건에 맞으면 Overriding을 하지 않고, 부모의 메소드 `super.fly()`를 호출한다!!!
main() 메소드를 포함하는 클래스 - SupersonicAirplaneExample
package sec01.exam04;
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();
}
}
// 실행 결과
/*
이륙합니다.
일반비행합니다.
초음속비행합니다.
일반비행합니다.
착륙합니다.
*/