Khi tôi nhìn thấy những tuyên bố ArrayList
Có bất kỳ lợi ích trong việc thực hiện một giao diện trong một lớp con mặc dù cha thực hiện cùng một giao diện
class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
mà thực hiện giao diện List
mặc dù ArrayList
's cha AbstractList
thực hiện các cùng một giao diện List
.
abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
tờ khai tương tự có thể được tìm thấy trên HashMap
, LinkedHashMap
tờ khai cũng có.
Trong tuyên bố của LinkedHashMap
, nó thực hiện giao diện Map
chỉ và không phải là giao diện khác được thực hiện bởi lớp cha của nó HashMap
.
Vì vậy, có thể có một số lợi ích của việc khai báo như vậy.
Nếu làm rõ ràng hơn là lợi ích duy nhất, thì LinkedHashMap thậm chí có thể triển khai các giao diện Cloneable, Serializable. Nhưng nó đã không. –
@CharlesGreenWay Tôi thường sẽ viết "Bản đồ <..> bản đồ = new LinkedHashMap <>()', nhưng hiếm khi 'Cloneable cloneable = new LinkedHashMap <>()' ... một 'LinkedHashMap' chủ yếu là một' Bản đồ', mặc dù nó thực hiện các giao diện khác. –
Cảm ơn @Heuster vì đã giải thích. Điều này cũng sẽ cho khả năng tương thích (ví dụ) Nếu trong tương lai, HashMap không thực hiện Bản đồ (mặc dù điều này có thể không xảy ra), sau đó LinkedHashMap vẫn có thể thực hiện Bản đồ –