더북(TheBook)

4.1.3 메서드 오버라이딩


서브클래스에서 슈퍼클래스 메서드를 수정할 때도 있다. 예를 들어 getSalary를 직원의 총 급여를 보고하는 메서드라고 하자. 그런데 상속받은 getSalary 메서드로는 Manager 클래스로 나타내는 관리자의 급여를 제대로 계산하지 못한다. Manager 클래스에서 getSalary 메서드를 오버라이드(override)해서 이 메서드가 기본 급여와 상여금의 합을 반환하게 해야 한다.

public class Manager extends Employee {

    ...

    public double getSalary() { // 슈퍼클래스의 메서드를 오버라이드한다.

        return super.getSalary() + bonus;

    }

}


ManagergetSalary 메서드는 기본 급여를 알아내는 슈퍼클래스 메서드를 호출한 후 상여금을 더한다. 서브클래스 메서드는 슈퍼클래스의 비공개 인스턴스 변수에 직접 접근할 수 없다는 점에 유의한다. Manager.getSalary 메서드에서 공개 메서드인 Employee.getSalary를 호출한 이유도 이 때문이다. 슈퍼클래스 메서드를 호출할 때는 super 키워드를 사용한다.

Note ≣

superthis와 달리 객체 참조가 아니다. 동적 메서드 조회(4.1.5 슈퍼클래스 할당 참고)를 우회해 특정 메서드를 호출할 때 사용하는 지시자(directive)다.

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