자주 인용되는 이유는 "인터페이스가 공용 API를 정의"하기 때문이지만, 이는 지나치게 단순화 된 것이라고 생각합니다. (그리고 그것은 순환 논리의 "냄새"이기도합니다.)
액세스 수정자가 혼합 된 인터페이스를 갖는 것은 의미가 없습니다. 예를 들어 부분적으로 공개되고 부분적으로 인터페이스와 동일한 패키지의 다른 클래스로 제한됩니다. 사실, 어떤 경우에는 IMO가 매우 유용 할 수 있습니다.
사실, 난의 일부라고 생각 추론 암시 적으로 공개 인터페이스의 제작 회원 뒤에이 있다는 것이다 는 자바 언어 간단합니다 :
암시 적 공용 인터페이스 멤버는 프로그래머가 처리하기가 더 간단합니다. 메소드 액세스 수정자가 무작위로 선택된 코드 (클래스)를 몇 번이나 보셨습니까? 많은 "일반"프로그래머는 Java 추상화 경계를 관리하는 가장 좋은 방법을 이해하는 데 어려움을 겪습니다 1 . 공용 / 보호 / 패키지-개인을 인터페이스에 추가하면 인터페이스가 더욱 어려워집니다.
암시 적으로 공용 인터페이스 멤버는 언어 사양을 단순화하므로 Java 컴파일러 작성자 및 Reflection API를 구현하는 사람들의 작업이됩니다.
"인터페이스가 공용 API를 정의한다"는 생각은 언어 디자인 결정을 단순화 한 결과 (또는 특성) 일 것입니다. 그 반대는 아닙니다. 그러나 실제로는 두 가지 생각이 Java 디자이너의 마음 속에서 병렬로 발전했을 것입니다.
여하튼 JDK-8179193 의 RFE에 대한 공식적인 응답 은 Java 디자인 팀이 인터페이스 를 허용 하는 것이 실질적인 이점이 거의없이 복잡성을 추가 한다고 2 결정했음을 분명히합니다 protected
. 증거 를 찾기 위해 @skomisa에게 찬사를 보냅니다 .
RFE의 증거가 문제를 해결합니다. 그것이 추가되지 않은 공식적인 이유입니다.
1-물론, 최고 수준의 프로그래머는 이러한 일에 어려움이 없으며 더 풍부한 액세스 제어 기능 팔레트를 환영 할 수 있습니다. 그러나 유지 관리를 위해 코드가 다른 사람에게 넘겨지면 어떻게됩니까?
2-당신은 그들의 결정이나 그들의 진술 된 이유에 동의하지 않을 수 있지만 그것은 논쟁의 여지가 있습니다.