Java 8의 새로운 기본 인터페이스 모델은 어떻게 작동합니까 (다이아몬드, 다중 상속 및 우선 순위 포함)?
이 새로운 인터페이스 모델은 어떻게 작동하며
- 이로 인해 발생할 수있는 다이아몬드 문제
- 이 구현의 다중 상속 문자
- 그리고 인터페이스 구현이 사용되는 우선 순위?
Java Lambda FAQ에 완벽한 설명이 있습니다 .
여기에서 인용이다 다이아몬드 문제에 대한 어떤 일이? 거기에 기사 :
interface A {
void m() default { ... }
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
초기의 경우 (위의 코드) D 에 의해 상속 된 m 의 구현은 A에 의해 정의 된 것과 모호하지 않습니다. 다른 가능성은 없습니다. B가 이제 m 의 기본 구현을 선언 하도록 상황이 변경 되면 D 가 "가장 구체적인 구현"규칙에 의해 상속되는 구현이됩니다 . 그러나 B 와 C 가 모두 기본 구현을 제공 하면 충돌하고 D 는 X.super.m (...) 구문을 사용하여 둘 중 하나 를 명시 적으로 선택하거나 메서드 자체를 다시 선언하여 모든 상위 유형 선언을 재정의해야합니다.
충돌하는 메서드 선언을 해결하는 규칙에 대한 이전 기사와 Java Lambda 프로젝트에 대한 기타 기사를 확인하십시오. 꽤 좋습니다.
다음은 Java 8의 새로운 인터페이스 모델 및 다중 상속의 다이아몬드 문제에 대한 자세한 설명입니다 .
이 예제에서 볼 수 있듯이 JDK 8 부터 Java는 일종의 다중 상속 을 도입 했으며 클래스 와 해당 인터페이스 에는 동일한 메서드 (동일한 이름 및 서명) 의 구현 이 포함될 수 있습니다 . 다이아몬드 문제를 해결하기 위해 구현 순서에 우선 순위가 있습니다. 클래스 가 인터페이스의 모든 기본 / 선택 메서드를 구현하는 경우에만 코드를 컴파일하고이 클래스의 구현을 사용할 수 있습니다. 그렇지 않으면 컴파일러는 인터페이스의 기본 구현으로 누락 된 구현을 패치하려고합니다.. 그리고 메서드의 기본 구현이 여러 개있는 경우 다이아몬드 문제가 발생하고 컴파일러가 컴파일을 거부합니다.
Java 8의 새로운 인터페이스 모델은 하위 호환성 에 접근 한 결과입니다 . 즉, Java 8 이전 인터페이스에 대해 작성된 기존 코드를 컴파일 가능하게 유지하기위한 것입니다.
'programing' 카테고리의 다른 글
모호성에 대한 경고를 제거하는 방법은 무엇입니까? (0) | 2021.01.15 |
---|---|
iframe src 요청에 요청 헤더를 추가 할 수 있습니까? (0) | 2021.01.15 |
Github에서 단일 조직의 새 리포지토리에 대한 자동 알림 구독을 끄려면 어떻게해야합니까? (0) | 2021.01.15 |
Android의 CoordinatorLayout에서 다른보기 아래에보기 위치 지정 (0) | 2021.01.15 |
cmake에서 생성 한 Visual Studio C ++ 프로젝트의 헤더 파일 나열 (0) | 2021.01.15 |