4.1.3 메서드 오버라이딩
서브클래스에서 슈퍼클래스 메서드를 수정할 때도 있다. 예를 들어 getSalary를 직원의 총 급여를 보고하는 메서드라고 하자. 그런데 상속받은 getSalary 메서드로는 Manager 클래스로 나타내는 관리자의 급여를 제대로 계산하지 못한다. Manager 클래스에서 getSalary 메서드를 오버라이드(override)해서 이 메서드가 기본 급여와 상여금의 합을 반환하게 해야 한다.
public class Manager extends Employee {
...
public double getSalary() { // 슈퍼클래스의 메서드를 오버라이드한다.
return super.getSalary() + bonus;
}
}
Manager의 getSalary 메서드는 기본 급여를 알아내는 슈퍼클래스 메서드를 호출한 후 상여금을 더한다. 서브클래스 메서드는 슈퍼클래스의 비공개 인스턴스 변수에 직접 접근할 수 없다는 점에 유의한다. Manager.getSalary 메서드에서 공개 메서드인 Employee.getSalary를 호출한 이유도 이 때문이다. 슈퍼클래스 메서드를 호출할 때는 super 키워드를 사용한다.
Note ≣
super는 this와 달리 객체 참조가 아니다. 동적 메서드 조회(4.1.5 슈퍼클래스 할당 참고)를 우회해 특정 메서드를 호출할 때 사용하는 지시자(directive)다.