더북(TheBook)

정답

public void run() {
    System.out.println("차가 달리면서 다음 정거장을 안내합니다.");
}

 

해설

상속받으면 상위 클래스가 가진 메서드를 사용할 수 있습니다. 따라서 Car 클래스를 상속받은 Bus 클래스는 Car 클래스가 가진 메서드를 사용할 수 있습니다. 그러나 Bus 클래스는 run 메서드가 필요하지만 Car 클래스가 가진 run 메서드와 다르게 동작하고 싶습니다. 물론 부모가 가진 메서드와 별개로 다른 이름의 메서드를 정의해 사용할 수도 있습니다. 그러면 사용자 입장에서는 차를 달리게 할 때와 버스를 달리게 할 때 각기 다른 메서드를 사용해야 하므로 불편합니다. 이런 불편함을 줄이기 위해 자바는 오버라이딩이라는 개념을 이용합니다.

 

이때 Car 클래스를 상속받은 Bus 클래스는 run 메서드를 두 개 가지게 되는데, 메서드는 오버라이딩되면 무조건 자식의 메서드를 사용하므로 둘 중 어떤 메서드가 사용될지 걱정하지 않아도 됩니다.

 

 

문제 2 오버라이딩하는 경우 부모 클래스의 메서드도 이용하고 싶을 경우, super 키워드를 이용합니다. Bus 클래스에서 run을 오버라이드하는 부분을 확인하고 [실행]을 눌러서 출력해보세요.

package javaStudy;
public class Bus extends Car{
    public void run() {
        // Car 클래스의 run을 호출합니다.
        super.run();
        // 추가 작업을 수행합니다.
        System.out.println("다음 정거장을 안내합니다.");
    }
}

 

실행결과

차가 달립니다.
다음 정거장을 안내합니다.

 

정답

완성형 예제입니다.

 

해설

앞 문제에서 메서드를 오버라이드하면 무조건 자식의 메서드를 이용한다는 규칙을 배웠습니다. 따라서 부모가 구현한 메서드를 실행하고 싶을 때는 명시적으로 알려줘야 합니다. 부모 클래스를 지칭하는 키워드는 super입니다. ‘super.메서드’ 또는 ‘super.필드’ 이렇게 호출하면 메서드나 필드를 오버라이드했을 때 명시적으로 부모의 메서드나 필드를 호출할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.