In questo esempio sul tutorial del sito Web di java page. Due interfacce definiscono lo stesso metodo predefinito startEngine()
. Una classe FlyingCar
implementa entrambe le interfacce e deve eseguire l'override di startEngine()
a causa del conflitto evidente.Confuso circa la parola chiave "super" in questo esempio 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);
}
}
Non capisco il motivo per cui, da FlyingCar
, super
viene utilizzato per fare riferimento a entrambe le versioni di startEngine()
in OperateCar
e FlyCar
interfacce. A quanto ho capito, startEngine()
non è stato definito in nessuna super classe, quindi non dovrebbe essere indicato come residente in uno. Anche io non vedo alcuna relazione tra super
e le due interfacce come attuata in FlyingCar
' super' da solo significa la superclasse. 'FlyCar.super' è nuovo in Java 8 e indica l'implementazione nell'interfaccia' FlyCar'. – immibis
Vedere http://stackoverflow.com/questions/19976487/explicitly-calling-a-default-method-in-java – Eran
Perché non leggi quel tutorial invece di estrarre semplicemente il codice di esempio? – Holger