Pytanie Implementacja interfejsów Super i Sub zarówno w klasie (klasa A implementuje SuperInterface, SubInterface)


interface A {

    public void doSomething();
}

interface B extends A {

    public void doSomethingElse();
}

public class AClass implements A, B {

    public void doSomething() {}

    public void doSomethingElse() {}

}

Dlaczego Java dopuszcza taką deklarację? Jaka jest korzyść z implementacji obu interfejsów, gdy można osiągnąć to samo poprzez implementację SubInterface (B)?


12
2018-01-23 16:02


pochodzenie


Co można zyskać, nie pozwalając na to? - Bill the Lizard
możliwy duplikat Dlaczego zarówno klasa nadrzędna, jak i podrzędna implementują ten sam interfejs? - Kate Gregory


Odpowiedzi:


Myślę, że pytanie "dlaczego" można uzyskać tylko przez projektantów Javy.

Jednym z powodów może być to, że pozwala na modernizację extends A do B bez przerywania istniejących klas, które już zdążyły zaimplementować oba.

Innym powodem użycia tej konstrukcji może być natychmiastowe poinformowanie użytkownika końcowego AClass że klasa implementuje oba A i B. Jest to omówione w Nadmiarowa implementacja interfejsu List w ArrayList.java


3
2018-01-23 16:06





Jest to po prostu wygoda. Może być trudno śledzić strukturę interfejsu i byłoby uciążliwe dla programisty, który musiałby to wszystko śledzić. Poza tym, nic dobrego nie może pochodzić z braku zezwalania na nadmiarowe interfejsy: implementowanie interfejsu wiele razy może być nieuniknione. Na przykład:

interface A { ... }
interface B extends A { ... }
interface C extends A { ... }
public class AClass implements B, C { ... }

W tym przypadku A jest "implementowany" dwa razy, ale nie stanowi to problemu. To po prostu oznacza to AClass musi wdrożyć każdą metodę zadeklarowaną w A, B, i C.


2
2018-01-23 16:04





Gdyby to był błąd, dodanie podstawowego interfejsu do istniejącego interfejsu publicznego byłoby przełomową zmianą.
(w przypadku, gdy kod klienta ma klasę, która już implementuje oba interfejsy)


1
2018-01-23 16:14





1) Dlaczego dwukrotne wdrożenie A nie jest zbędne, ale nie powoduje zamieszania.

2) interfejs B może zostać zmieniony (i może już nie przedłużać A).     AClassnadal będzie realizować A i B


0
2018-01-23 16:06