더북(TheBook)

두 번째 규칙을 보자. getName 메서드를 포함하는 또 다른 인터페이스가 있다고 하자.


interface Named {

default String getName() {

return getClass().getName() + "_" + hashCode();

}

}


 

다음과 같이 두 인터페이스 모두를 구현하는 클래스를 정의하면 무슨 일이 일어날까?


class Student implements Person, Named {

...

}


 

Student 클래스는 PersonNamed 인터페이스가 제공하는 두 가지 모순되는 getName 메서드를 상속한다. 자바는 이 중 하나를 우선해서 선택하기보다는 오류를 보고하고 프로그래머에게 모호함을 해결하도록 맡긴다. 단순히 Student 클래스에 getName 메서드를 제공하자. 이 메서드 안에서 다음처럼 두 충돌 메서드 중 하나를 선택할 수 있다.


class Student implements Person, Named {

public String getName() { return Person.super.getName(); }

...

}


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