더북(TheBook)

Employee 클래스는 Person 인터페이스의 getId 메서드와 Identified 인터페이스의 getId 메서드를 상속받는다. 문제는 자바 컴파일러가 그중 하나를 우선해서 선택하지 못한다는 것이다. 결국 컴파일러는 프로그래머가 이 모호성을 해결하도록 오류를 보고한다. 이 문제를 해결하려면 Employee 클래스에 getId 메서드를 추가한 후 고유의 ID 체계를 구현하거나, 다음과 같이 충돌한 메서드 중 하나에 위임해야 한다.

public class Employee implements Person, Identified {

    public int getId() { return Identified.super.getId(); }

    ...

}


Note ≣

super 키워드로 슈퍼타입의 메서드를 호출할 수 있다. 이 예제에서는 둘 중 어느 슈퍼타입을 원하는지 명시해야 한다. 문법이 약간 이상하게 보일 수 있지만, 슈퍼클래스의 메서드를 호출하는 문법과 일관성이 있다(슈퍼클래스 메서드를 호출하는 방법은 4장 상속과 리플렉션에서 자세히 설명한다).


이번에는 Identified 인터페이스에서 getId를 기본 메서드로 구현하지 않는다고 하자.

interface Identified {

    int getId();

}

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