programing

Java 8의 새로운 기본 인터페이스 모델은 어떻게 작동합니까 (다이아몬드, 다중 상속 및 우선 순위 포함)?

coolbiz 2021. 1. 15. 08:32
반응형

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 가 "가장 구체적인 구현"규칙에 의해 상속되는 구현이됩니다 . 그러나 BC 가 모두 기본 구현을 제공 하면 충돌하고 DX.super.m (...) 구문을 사용하여 둘 중 하나 를 명시 적으로 선택하거나 메서드 자체를 다시 선언하여 모든 상위 유형 선언을 재정의해야합니다.

충돌하는 메서드 선언을 해결하는 규칙에 대한 이전 기사와 Java Lambda 프로젝트에 대한 기타 기사를 확인하십시오. 꽤 좋습니다.


다음은 Java 8의 새로운 인터페이스 모델 및 다중 상속의 다이아몬드 문제에 대한 자세한 설명입니다 .

이 예제에서 볼 수 있듯이 JDK 8 부터 Java는 일종의 다중 상속도입 했으며 클래스 와 해당 인터페이스 에는 동일한 메서드 (동일한 이름 및 서명) 구현 이 포함될 수 있습니다 . 다이아몬드 문제를 해결하기 위해 구현 순서에 우선 순위가 있습니다. 클래스 가 인터페이스의 모든 기본 / 선택 메서드를 구현하는 경우에만 코드를 컴파일하고이 클래스의 구현을 사용할 수 있습니다. 그렇지 않으면 컴파일러는 인터페이스의 기본 구현으로 누락 된 구현을 패치하려고합니다.. 그리고 메서드의 기본 구현이 여러 개있는 경우 다이아몬드 문제가 발생하고 컴파일러가 컴파일을 거부합니다.
Java 8의 새로운 인터페이스 모델은 하위 호환성 에 접근 한 결과입니다  . 즉, Java 8 이전 인터페이스에 대해 작성된 기존 코드를 컴파일 가능하게 유지하기위한 것입니다.

참조 URL : https://stackoverflow.com/questions/16764791/how-does-java-8-new-default-interface-model-works-incl-diamond-multiple-inhe

반응형