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();
	}
}

// 실행 결과

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