W tym przykładzie na samouczek strony Java page. Dwa interfejsy definiują tę samą domyślną metodę: startEngine()
. Klasa FlyingCar
implementuje oba interfejsy i musi zastąpić startEngine()
z powodu oczywistego konfliktu.Mylić o słowo kluczowe "super" w tym przykładzie Java
public interface OperateCar {
// ...
default public int startEngine(EncryptedKey key) {
// Implementation
}
}
public interface FlyCar {
// ...
default public int startEngine(EncryptedKey key) {
// Implementation
}
}
public class FlyingCar implements OperateCar, FlyCar {
// ...
public int startEngine(EncryptedKey key) {
FlyCar.super.startEngine(key);
OperateCar.super.startEngine(key);
}
}
Nie rozumiem, dlaczego od FlyingCar
, super
jest używany w odniesieniu do obu wersji startEngine()
w OperateCar
i FlyCar
interfejsów. Jak rozumiem, startEngine()
nie został zdefiniowany w żadnej super klasie, dlatego nie powinien być nazywany rezydentem w jednym. Ja też nie widzę żadnego związku między super
oraz dwa interfejsy wprowadzone w FlyingCar
' super' samo w sobie oznacza superklasę. 'FlyCar.super' jest nowy w Javie 8 i oznacza implementację w interfejsie' FlyCar'. – immibis
Zobacz http://stackoverflow.com/questions/19976487/exicially-calling-a-default-method-in-java – Eran
Dlaczego nie czytasz tego samouczka zamiast po prostu wyodrębniając przykładowy kod? – Holger