본문 바로가기

카테고리 없음

7.1 상속_부모 메소드 호출

부모 메소드 호출

메소드를 재정의하면 부모클래스의 해당 메소드는 숨겨지고, 재정의된 자식 메소드만 사용된다. 

그러나 자식 클래스 내부에서 재정의된 부모 클래스의 메소드를 호출해야 할 때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();
	}
}

실행결과: 

이륙합니다.
비행합니다.
초음속 비행을 합니다.
비행합니다.
착륙합니다.