Як новая мадэль інтэрфейсу па змаўчанні Java 8 'працуе (вкл. Алмаз, множны ўспадкоўванне, і прыярытэт)?

Як гэтая новая мадэль інтэрфейс працуе, а што пра

  • праблема алмазаў, якія могуць узнікнуць з гэтага
  • множнага спадчыну характар ​​гэтай рэалізацыі
  • <�Літый> і прыярытэт, з якім выкарыстоўваюцца рэалізацыі інтэрфейсу ?
49
У мяне стварылася ўражанне, што вы маглі б адказаць на большасць вашых уласных пытанняў, проста спрабуючы гэта.
дададзена аўтар Edwin Dalorzo, крыніца
У мяне стварылася ўражанне, што вы маглі б адказаць на большасць вашых уласных пытанняў, проста спрабуючы гэта.
дададзена аўтар Edwin Dalorzo, крыніца
У мяне стварылася ўражанне, што вы маглі б адказаць на большасць вашых уласных пытанняў, проста спрабуючы гэта.
дададзена аўтар Edwin Dalorzo, крыніца
Правільна :) На самай справе я не мог знайсці адказ, як была апрацавана праблема алмазаў. Так што я спрабаваў сам.
дададзена аўтар Alex, крыніца
Правільна :) На самай справе я не мог знайсці адказ, як была апрацавана праблема алмазаў. Так што я спрабаваў сам.
дададзена аўтар Alex, крыніца
Правільна :) На самай справе я не мог знайсці адказ, як была апрацавана праблема алмазаў. Так што я спрабаваў сам.
дададзена аўтар Alex, крыніца

7 адказы

Існуе ідэальнае тлумачэнне ў Java Lambda Даведка .
Вось цытата з Што можна сказаць аб праблеме алмазаў артыкулы:

interface A {
    void m() default { ... }        
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
<�Р> У зыходным выпадку (вышэй кода), рэалізацыя <�моцны> т </моцны> успадкоўваецца <�моцны> D </моцны> адназначна, што вызначаецца <�моцны> А </моцны> - ёсць няма ніякай іншай магчымасці. Калі сітуацыя мяняецца, так што <�моцны> B цяпер аб'яўляе рэалізацыю па змаўчанні <�моцны> т , які становіцца рэалізацыю, D спадчыну ад «найбольш канкрэтных рэалізацыя "правілаў. Але калі і <�моцны> B і <�моцны> C забяспечваюць рэалізацыю па змаўчанні, то яны канфлікт, і <�моцны> D павінны альбо выкарыстоўваць сінтаксіс <�моцны> X.super.m (...) відавочна выбраць адзін з іх, ці ж переобъявить сам метад, адмяняючы ўсе аб'явы Supertype.

Будзьце ўпэўненыя, каб праверыць папярэдні артыкул аб правілах дазволу супярэчлівых заяваў метадаў і іншыя артыкулы на праекце Java Lambda - яны вельмі добрыя.

49
дададзена
чаму па змаўчанні ключавога слова пасля таго, як параметры?
дададзена аўтар UnKnown, крыніца
гэта гучыць як хаос :( старшынства?
дададзена аўтар Thufir, крыніца
ці ёсць спосаб, каб прасіць кампілятар без памылак, а не з дапамогай "найбольш канкрэтнай рэалізацыі» правілы?
дададзена аўтар Sam, крыніца
Спасылкі з'яўляюцца вычарпальнымі - гэта павінна быць прынята адказваць.
дададзена аўтар Rory Hunter, крыніца

Існуе ідэальнае тлумачэнне ў Java Lambda Даведка .
Вось цытата з Што можна сказаць аб праблеме алмазаў артыкулы:

interface A {
    void m() default { ... }        
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
<�Р> У зыходным выпадку (вышэй кода), рэалізацыя <�моцны> т </моцны> успадкоўваецца <�моцны> D </моцны> адназначна, што вызначаецца <�моцны> А </моцны> - ёсць няма ніякай іншай магчымасці. Калі сітуацыя мяняецца, так што <�моцны> B цяпер аб'яўляе рэалізацыю па змаўчанні <�моцны> т , які становіцца рэалізацыю, D спадчыну ад «найбольш канкрэтных рэалізацыя "правілаў. Але калі і <�моцны> B і <�моцны> C забяспечваюць рэалізацыю па змаўчанні, то яны канфлікт, і <�моцны> D павінны альбо выкарыстоўваць сінтаксіс <�моцны> X.super.m (...) відавочна выбраць адзін з іх, ці ж переобъявить сам метад, адмяняючы ўсе аб'явы Supertype.

Будзьце ўпэўненыя, каб праверыць папярэдні артыкул аб правілах дазволу супярэчлівых заяваў метадаў і іншыя артыкулы на праекце Java Lambda - яны вельмі добрыя.

49
дададзена
чаму па змаўчанні ключавога слова пасля таго, як параметры?
дададзена аўтар UnKnown, крыніца
гэта гучыць як хаос :( старшынства?
дададзена аўтар Thufir, крыніца
ці ёсць спосаб, каб прасіць кампілятар без памылак, а не з дапамогай "найбольш канкрэтнай рэалізацыі» правілы?
дададзена аўтар Sam, крыніца
Спасылкі з'яўляюцца вычарпальнымі - гэта павінна быць прынята адказваць.
дададзена аўтар Rory Hunter, крыніца

Існуе ідэальнае тлумачэнне ў Java Lambda Даведка .
Вось цытата з Што можна сказаць аб праблеме алмазаў артыкулы:

interface A {
    void m() default { ... }        
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
<�Р> У зыходным выпадку (вышэй кода), рэалізацыя <�моцны> т </моцны> успадкоўваецца <�моцны> D </моцны> адназначна, што вызначаецца <�моцны> А </моцны> - ёсць няма ніякай іншай магчымасці. Калі сітуацыя мяняецца, так што <�моцны> B цяпер аб'яўляе рэалізацыю па змаўчанні <�моцны> т , які становіцца рэалізацыю, D спадчыну ад «найбольш канкрэтных рэалізацыя "правілаў. Але калі і <�моцны> B і <�моцны> C забяспечваюць рэалізацыю па змаўчанні, то яны канфлікт, і <�моцны> D павінны альбо выкарыстоўваць сінтаксіс <�моцны> X.super.m (...) відавочна выбраць адзін з іх, ці ж переобъявить сам метад, адмяняючы ўсе аб'явы Supertype.

Будзьце ўпэўненыя, каб праверыць папярэдні артыкул аб правілах дазволу супярэчлівых заяваў метадаў і іншыя артыкулы на праекце Java Lambda - яны вельмі добрыя.

49
дададзена
чаму па змаўчанні ключавога слова пасля таго, як параметры?
дададзена аўтар UnKnown, крыніца
гэта гучыць як хаос :( старшынства?
дададзена аўтар Thufir, крыніца
ці ёсць спосаб, каб прасіць кампілятар без памылак, а не з дапамогай "найбольш канкрэтнай рэалізацыі» правілы?
дададзена аўтар Sam, крыніца
Спасылкі з'яўляюцца вычарпальнымі - гэта павінна быць прынята адказваць.
дададзена аўтар Rory Hunter, крыніца

Here is a detailed explanation for Java 8' new interface model & the diamond problem of multiple inheritance.

As you might see in this examples, starting with JDK 8, Java has introduced a kind of multiple inheritance as both, the class and its interface might contain an implementation of the same method (same name & signature). To address the diamond problem there is a precedence in which order an implementation is used: only if the class implements all default/optional methods of its interfaces, the code can be compiled and the implementations of this class are used. Otherwise the compiler tries to patch the missing implementation(s) with interface's default implementation. And if there are multiple default implementations of a method, then the diamond problem occurs and the compiler rejects the compilation.
Java 8' new interfaces model is the result of approaching backwards compatibility, i. e. to keep existing code that was written against pre Java 8 interfaces compilable.

13
дададзена
Ці сапраўды гэта правільна? Гледзячы на ​​ спасылкі ад адказу @ Руды: Праблема алмаза робіць <�я> не ўзнікае, калі ёсць некалькі рэалізацый па змаўчанні на розных узроўнях іерархіі інтэрфейсу. Толькі калі ёсць мноства рэалізацый па змаўчанні на той жа ўзровень. Гэта значыць, толькі калі B і З рэалізаваць метад. Гэта не ясна з гэтага адказу.
дададзена аўтар joergl, крыніца

Here is a detailed explanation for Java 8' new interface model & the diamond problem of multiple inheritance.

As you might see in this examples, starting with JDK 8, Java has introduced a kind of multiple inheritance as both, the class and its interface might contain an implementation of the same method (same name & signature). To address the diamond problem there is a precedence in which order an implementation is used: only if the class implements all default/optional methods of its interfaces, the code can be compiled and the implementations of this class are used. Otherwise the compiler tries to patch the missing implementation(s) with interface's default implementation. And if there are multiple default implementations of a method, then the diamond problem occurs and the compiler rejects the compilation.
Java 8' new interfaces model is the result of approaching backwards compatibility, i. e. to keep existing code that was written against pre Java 8 interfaces compilable.

13
дададзена
Ці сапраўды гэта правільна? Гледзячы на ​​ спасылкі ад адказу @ Руды: Праблема алмаза робіць <�я> не ўзнікае, калі ёсць некалькі рэалізацый па змаўчанні на розных узроўнях іерархіі інтэрфейсу. Толькі калі ёсць мноства рэалізацый па змаўчанні на той жа ўзровень. Гэта значыць, толькі калі B і З рэалізаваць метад. Гэта не ясна з гэтага адказу.
дададзена аўтар joergl, крыніца

Here is a detailed explanation for Java 8' new interface model & the diamond problem of multiple inheritance.

As you might see in this examples, starting with JDK 8, Java has introduced a kind of multiple inheritance as both, the class and its interface might contain an implementation of the same method (same name & signature). To address the diamond problem there is a precedence in which order an implementation is used: only if the class implements all default/optional methods of its interfaces, the code can be compiled and the implementations of this class are used. Otherwise the compiler tries to patch the missing implementation(s) with interface's default implementation. And if there are multiple default implementations of a method, then the diamond problem occurs and the compiler rejects the compilation.
Java 8' new interfaces model is the result of approaching backwards compatibility, i. e. to keep existing code that was written against pre Java 8 interfaces compilable.

13
дададзена
Ці сапраўды гэта правільна? Гледзячы на ​​ спасылкі ад адказу @ Руды: Праблема алмаза робіць <�я> не ўзнікае, калі ёсць некалькі рэалізацый па змаўчанні на розных узроўнях іерархіі інтэрфейсу. Толькі калі ёсць мноства рэалізацый па змаўчанні на той жа ўзровень. Гэта значыць, толькі калі B і З рэалізаваць метад. Гэта не ясна з гэтага адказу.
дададзена аўтар joergl, крыніца

Here is a detailed explanation for Java 8' new interface model & the diamond problem of multiple inheritance.

As you might see in this examples, starting with JDK 8, Java has introduced a kind of multiple inheritance as both, the class and its interface might contain an implementation of the same method (same name & signature). To address the diamond problem there is a precedence in which order an implementation is used: only if the class implements all default/optional methods of its interfaces, the code can be compiled and the implementations of this class are used. Otherwise the compiler tries to patch the missing implementation(s) with interface's default implementation. And if there are multiple default implementations of a method, then the diamond problem occurs and the compiler rejects the compilation.
Java 8' new interfaces model is the result of approaching backwards compatibility, i. e. to keep existing code that was written against pre Java 8 interfaces compilable.

13
дададзена
Ці сапраўды гэта правільна? Гледзячы на ​​ спасылкі ад адказу @ Руды: Праблема алмаза робіць <�я> не ўзнікае, калі ёсць некалькі рэалізацый па змаўчанні на розных узроўнях іерархіі інтэрфейсу. Толькі калі ёсць мноства рэалізацый па змаўчанні на той жа ўзровень. Гэта значыць, толькі калі B і З рэалізаваць метад. Гэта не ясна з гэтага адказу.
дададзена аўтар joergl, крыніца