Trong ví dụ này trên hướng dẫn của trang web java page. Hai giao diện xác định cùng phương thức mặc định startEngine()
. Lớp FlyingCar
triển khai cả hai giao diện và phải ghi đè startEngine()
do xung đột rõ ràng.Bối rối về từ khóa "siêu" trong ví dụ Java này
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);
}
}
Tôi không hiểu tại sao, từ FlyingCar
, super
được dùng để ám chỉ cả hai phiên bản startEngine()
trong OperateCar
và FlyCar
giao diện. Theo tôi hiểu nó, startEngine()
không được định nghĩa trong bất kỳ lớp siêu nào, do đó không nên được gọi là cư dân trong một. Tôi cũng không thấy bất kỳ mối quan hệ giữa super
và hai giao diện như thực hiện trong FlyingCar
' super' của chính nó có nghĩa là siêu lớp. 'FlyCar.super' là mới trong Java 8, và có nghĩa là thực hiện trong giao diện' FlyCar'. – immibis
Xem http://stackoverflow.com/questions/19976487/explicitly-calling-a-default-method-in-java – Eran
Tại sao bạn không đọc hướng dẫn đó thay vì chỉ trích xuất mã ví dụ? – Holger