Kiedy widząc deklarację ArrayList
Czy jest jakaś korzyść w realizacji interfejs w podklasie chociaż nadklasą realizuje ten sam interfejs
class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
który implementuje List
interfejs chociaż nadklasą ArrayList
„s AbstractList
implementuje ten sam interfejs List
.
abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
Podobne deklaracje można znaleźć na HashMap
, LinkedHashMap
deklaracji również.
W deklaracji LinkedHashMap
, realizuje i nie Map
interfejsu inne interfejsy realizowane przez jej nadklasy HashMap
.
Może być więc kilka korzyści z posiadania takich deklaracji.
Jeśli jedyną korzyścią jest uczynienie bardziej przejrzystym, to LinkedHashMap może nawet implementować interfejsy Cloneable, Serializable. Ale tak się nie stało. –
@CharlesGreenWay Zazwyczaj piszę: 'Map <..> map = new LinkedHashMap <>()', ale rzadko 'Cloneable cloneable = new LinkedHashMap <>()' ... a 'LinkedHashMap' to głównie' Mapa', chociaż implementuje także inne interfejsy. –
Dzięki @Heuster za wyjaśnienie. Czy będzie to również kompatybilność (np.) Jeśli w przyszłości HashMap nie będzie implementować mapy (nawet jeśli to nie nastąpi), to LinkedHashMap może nadal implementować Mapę –