더북(TheBook)

이 메서드는 기존 메서드와 다른 새 메서드다. 이제 Manager에는 서로 별개인 worksFor 메서드가 두 개 있다. 이런 실수는 슈퍼클래스 메서드를 오버라이드하려는 메서드에 @Override 애너테이션을 붙이면 막을 수 있다.

@Override public boolean worksFor(Employee supervisor)


이렇게 하면 실수로 새 메서드를 정의했을 때 컴파일러가 오류를 보고한다.

메서드를 오버라이드할 때 반환 타입을 서브타입(하위 타입)으로 바꿀 수 있다(기술적인 용어로 표현하면 공변 반환 타입(covariant return type)2을 쓸 수 있다). 예를 들어 Employee 클래스에 다음 메서드가 있다고 하자.

public Employee getSupervisor()


그러면 Manager 클래스는 메서드를 다음과 같이 오버라이드할 수 있다.

@Override public Manager getSupervisor()


icon Caution

메서드를 오버라이드할 때 서브클래스 메서드는 적어도 슈퍼클래스 메서드만큼은 접근을 허용해야 한다. 특히 슈퍼클래스 메서드를 공개로 선언했다면 서브클래스 메서드도 반드시 공개로 선언해야 한다. 서브클래스 메서드에 public 제어자를 빠뜨리는 실수를 흔히 저지른다. 그러면 컴파일러는 접근 특권이 약하다고 불평한다.


2 슈퍼타입과 서브타입의 관계를 유지하는 반환 타입을 의미한다.

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