Di seguito è riportato il diagramma, dove, se consideriamo solo le implementazioni di List,
AbstractList
mantieneilcomportamentodibasedellalista.PerintrodurrelanuovaimplementazioneclassMyList
(diciamo)sipuòereditareAbstractList
esovrascrivere(senecessario)imetodirichiesti.EstendendoAbstractList
.Inoltre,classMyList
starispettandoilcontrattopercomportarsicomeunelenco.classMyListextendsAbstractList{..}
Gliutentipossonoutilizzarelagerarchiadiraccolta,come,
AbstractListl=newArrayList<String>();l.add("one"); //execute ArrayList's add method
-
Una classe può anche mantenere una relazione di composizione con qualsiasi implementazione di lista (in fase di esecuzione), avendo
AbstractList l;
come membro, che viene popolato in fase di runtime, con qualsiasi implementazione di lista.
Quindi
Mi piacerebbe capire la ragione chiara, perché viene aggiunto ulteriormente interface List<E>
?
note1: L'intenzione è capire, come usare l'interfaccia. Questa non è una domanda duplicata, perché vengono utilizzate sia la classe astratta che l'interfaccia. Non ho usato la parola "invece di" o "piuttosto"
note2: Non entriamo nei metodi predefiniti di java-8, poiché la gerarchia di raccolta precedente è stata progettata con tutto ciò che è stato fornito fino a java-7