PDA

View Full Version : [Java]Differenza fra classi astratte e interfacce


Mattyfog
08-04-2012, 10:10
Ciao a tutti!
Per entrare a far parte del mondo android sto approfondendo, o meglio, studiando java, le cui mie conoscenze si limitavano solo a qualche script javascript. La mia intenzione sarebbe quella di completarne una conoscenza generale e poi approfondire bene tutti gli argomenti.
Mi sono trovato di fronte alle classi astratte e alle interfacce. Nonostante abbia capito la differenza fra le due circa i limiti che queste offrono, non ho capito che senso possa avere usare un'interfaccia piuttosto che una classe astratta. Stando a quello che ho capito una classe può derivare più interfacce ma non più classi. È solo questa la ragione?
Altrimenti che senso avrebbe definire una interfaccia quando si potrebbe definire una classe astratta con solo metodi astratti?
Spero possiate chiarirmi le differenze :) Grazie e buona Pasqua!

wizard1993
08-04-2012, 11:41
È solo questa la ragione?


No. Con le classi astratte valgono comunque tutte le questioni legate all'ereditarietà quindi oltre che un contratto da rispettare (cosa che alla fine è un interfaccia) una classe astratta ti permette di far ereditare attributi e metodi già implementati. In altre parole con una classe astratta puoi fare questo

public abstract class a1234 {
protected int a=10;
public void pippo(){
System.out.println("182");
}

public int getA() {
return a;
}
public abstract void toDo() ;



}

facendo si che le classi figlie abbiano ereditino direttamente implementati i metodi pippo e getA(), così come la variabile "a";
con le interfaccie invece questo giochino non lo puoi fare

PGI-Bis
08-04-2012, 12:05
La differenza è quella [edit: detta da Mattyfog]. La praticità delle interfacce emerge solo quando il sistema che scrivi supera una certa complessità - nel senso della quantità di definizioni e di combinazioni di quelle definizioni - e dipende dal fatto che all'aumentare della complessità del sistema il numero di funzioni tende a diventare costante mentre il numero di combinazioni di quelle funzioni cresce sempre. Le interfacce ti servono in concreto per evitare la duplicazione delle funzioni di base.