Ciao a tutti, è qualche giorno che cerco di capire come diamine si usano le interface per creare liste.
Intanto mi viene difficile capire perchè non sfruttare gli array che sono così comodi, ma tant'è. (sono molto abituato alla programmazione procedurale )

posto un codice stupido, che avrebbe il solo scopo di farmi capire come usare questa cosa

codice:
interface IProva {
	String getUtente();
}

class vuoto implements IProva{
	public vuoto(){}
	public String getUtente(){return "";}
}

class pieno implements IProva{
	Utente primo;
	IProva altri;
	
	public pieno(Utente primo, IProva altri){
		this.primo=primo;
		this.altri=altri;
	}
	
	public String getUtente(){
		return primo.n+" "+primo.c;
	}
}

class Utente{
	String n;
	String c;
	public Utente(String n, String c){
		this.n=n;
		this.c=c;
	}
}


public class Principale {
	public static void main(String[] args) {
		Utente uno=new Utente("nome","cognome");
		Utente due=new Utente("io","tu");
		
		IProva prova=new pieno(uno,new pieno(due, new vuoto()));
		
		System.out.println(prova.getUtente());
	}
}
1. cosa significa fare questo? (parte in grassetto)

public pieno(Utente primo, IProva altri ){

il parametro di tipo interfaccia del metodo non riesco a capire ne a trovare una spiegazione da nessuna parte ci sono dietro da diversi giorni.. ad oggi l'ho preso come un "dato di fatto" ma vorrei capire

2. Ovviamente il getUtente mi restituisce solo il primo elemento inserito..come faccio a riceverli tutti?