Instanziare una classe usando un reference di tipo interfaccia?

di Anonimizzato11567 il
4 risposte
Salve a tutti,
sto imparando il linguaggio JAVA dal libro "Manuale di JAVA 8" di Claudio De Sio Cesari e mi sono imbattuto in questa istruzione:
List<Auto> lista = new ArrayList<Auto>
In pratica, seguendo la documentazione della libreria standard di Java, ArrayList<Auto> è una classe Generics e viene instanziato un oggetto che accetta come parametro un oggetto di tipo Auto (correggetemi se sbaglio); come reference a questo nuovo oggetto, viene usato "lista", un reference di tipo List<Auto>; ma List<Auto> indica una interfaccia Generics o una classe Generics?

4 Risposte

  • Java.util.List è una interfaccia "generica".
    java.util.ArrayList è una classe "generica", che implementa la interfaccia List.

    Quindi ArrayList è-un List, e con la tua parametrizzazione idem ArrayList<Auto> è-un List<Auto> .
  • Perfetto, quindi è lecito utilizzare un reference di tipo interfaccia ("lista") che "punta" ad un oggetto di tipo "implementazione di quella interfaccia" (cioè l' oggetto instanziato da "new ArrayList<Auto>")?
  • Certo, ma questo vale in generale per i principi di ereditarietà/polimorfismo. Dove è richiesto un tipo X è lecito passare/assegnare un oggetto X o di un sottotipo di X.

    CharSequence cs = "ciao";

    (CharSequence è una interfaccia implementata da String)

    Comparable<Integer> cmp = new Integer(123);

    (Comparable<Integer> è una interfaccia implementata da Integer)
  • Chiarissimo, grazie 1000
Devi accedere o registrarti per scrivere nel forum
4 risposte