두 번째 규칙을 보자. getName 메서드를 포함하는 또 다른 인터페이스가 있다고 하자.
interface Named {
default String getName() {
return getClass().getName() + "_" + hashCode();
}
}
다음과 같이 두 인터페이스 모두를 구현하는 클래스를 정의하면 무슨 일이 일어날까?
class Student implements Person, Named {
...
}
Student 클래스는 Person과 Named 인터페이스가 제공하는 두 가지 모순되는 getName 메서드를 상속한다. 자바는 이 중 하나를 우선해서 선택하기보다는 오류를 보고하고 프로그래머에게 모호함을 해결하도록 맡긴다. 단순히 Student 클래스에 getName 메서드를 제공하자. 이 메서드 안에서 다음처럼 두 충돌 메서드 중 하나를 선택할 수 있다.
class Student implements Person, Named {
public String getName() { return Person.super.getName(); }
...
}