더북(TheBook)

4.1.11 상속과 기본 메서드


클래스를 확장하고 인터페이스를 구현하는 클래스가 있는데, 클래스와 인터페이스에 있는 메서드 이름이 같은 경우를 생각해 보자.

public interface Named {

    default String getName() { return " "; }

}


public class Person {

    ...

    public String getName() { return name; }

}


public class Student extends Person implements Named {

    ...

}


이때는 항상 슈퍼클래스 구현이 인터페이스 구현보다 우선한다. 그러므로 서브클래스에서 충돌을 해결할 필요가 없다. 반면에 3장 인터페이스와 람다 표현식에서 살펴보았듯이 인터페이스 두 개에서 이름이 같은 기본 메서드를 상속받을 때는 충돌을 해결해야 한다.

‘클래스 우선’ 규칙은 자바 7과 호환성을 보장한다. 따라서 인터페이스에 기본 메서드를 추가해도 기본 메서드가 생기기 전부터 작동하던 코드에는 영향을 주지 않는다.

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