Il fatto è che ancora non ho capito la differenza tra i due! Ho letto anche un post in questo forum ma ancora non mi è chiaro. A che serve per esempio definire dei metodi in una interfaccia se poi devo scrivere il codice che li implementa nella classe che la usa?
Grassie per l'attenzione [/B]
C'è una bella differenza 
Concettualmente parlado una classe astratta è una definizione INCOMPLETA di un'entità, che non può essere istanziata ex novo perchè non definisce uno o + metodi. Il classico esempio è la Class PoligonoGenerico, che ha il metodo calcolaArea dichiarato come astratto (supponiamo che non esista una funzione generica per calcolare l'area di un poligono con un qualsiasi numero di lati).
L'oggetto Poligono quindi è un'entita' astratta, che non potrà mai esistere. Potranno altesì essere istanziate le sue sottoclassi Quadrato, Triangolo, Rettangolo ...... , che implementano invece il metodo CalcolaArea.
andrà quindi in errore il codice:
codice:
Poligono unPoligono = new Poligono();
//Poligono è astratta!!
Metre funzionerà
codice:
Quadrato quadrato = new Quadrato(5);
//o anche
Poligono unPoligono = new Quadrato(5);
L'utilizzo delle interfaccie ci viene incontro quando vogliamo che la nostra classe implementi determinate caratteristiche, indipendentemente dalla struttura gerarchica a cui appartiene.
Supponiamo che i nostri poligoni debbano essere visualizzati su un'area grafica. Sarà sufficente specificare nella dichiarazione della classe che essi implementano la caratteristica Disegnabile, dichiarata come Interfaccia a parte in un file Disegnabile.java, con il seguente metodo vuoto:
PaintPoligono(Graphics g);
Nella
codice:
class Quadrato implements Disegnabile
andrà quindi implementato il suddetto metodo!
Tutto questo può servire,ad esempio, ad una classe che voglia visualizzare su schermo un Vector di oggetti "Disegnabile", indipendentemente da cosa essi effettivamente siano: poligoni, finestre o oggetti 3d.
Scusate i nomi schifidi in italiano ma ho cercato di essere + chiaro il possibile ^^!!