PDA

Visualizza la versione completa : [JAVA] Interfacce ed abstract


folal
23-04-2004, 12:33
Salve,
mi sto affaciando al mondo java, e dopo avere scoperto diverse
sue potenzialità, sono caduto in una forte confusione.

Fatto salvo di avere capito cosa sia ed a cosa serva una classe
abstract, non riesco a capire a cosa serva una interfaccia.

A dire il vero non riesco a capire cosa faccia di differente dalla
abstract, se non solo definire le firme dei metodi, cosa che fa già
l'abstract.

In poche parole, quando in un progetto decido di usare una
interfaccia e quando un abstract?!! :dhò:

civico3
23-04-2004, 13:06
Dovrebbe essere qualcosa del genere:

In Java non è contemplata l'ereditarietà multipla, per cui per poter far in modo che una classe abbia le caratteristiche di + classi padri si utilizzano le interfacce.
Le classi abstract si usano per "forzare" chi utilizzerà queste classi a rispettare la struttura imposta dalla classe astratta.

Spero di essere stato chiaro e non averti detto troppe cavolate

folal
23-04-2004, 14:27
Ho capito.

Grazie

Xadoom
23-04-2004, 15:39
Credo la differenza sia anche concettuale:

-se si espande una classe astratta X la classe figlia Y E' una classe X,il fatto che X sia astratta implica solo che la classe figlia essendo appunto della stessa "famiglia" deve comportarsi allo stesso modo della madre.

-Se una classe implementa una interfaccia significa che la classe USA questa interfaccia, ovvero assicura che tutte le classi che implementano un'interfaccia possono rispondere a delle chiamate di metodo che l'interfaccia mette a disposizione.

Quindi mentre due classi che non c'entrano nulla tra loro possono implementare la stessa interfaccia, se due classi espandono la setessa classe significa che fanno parte della stessa famiglia. :ciauz:

LeleFT
23-04-2004, 16:34
Originariamente inviato da Xadoom
Credo la differenza sia anche concettuale:

-se si espande una classe astratta X la classe figlia Y E' una classe X,il fatto che X sia astratta implica solo che la classe figlia essendo appunto della stessa "famiglia" deve comportarsi allo stesso modo della madre.

-Se una classe implementa una interfaccia significa che la classe USA questa interfaccia, ovvero assicura che tutte le classi che implementano un'interfaccia possono rispondere a delle chiamate di metodo che l'interfaccia mette a disposizione.

Quindi mentre due classi che non c'entrano nulla tra loro possono implementare la stessa interfaccia, se due classi espandono la setessa classe significa che fanno parte della stessa famiglia. :ciauz:

Quello che dici è perfetto... solo che Java non distingue così fortemente tra interfaccia e classe madre.
Una classe che implementa una inferfaccia diventa anche un'oggetto di quel tipo (proprio ciò che succede con l'ereditarietà multipla). E' per questo che, per esempio, nel metodo addWindowListener() io posso passare qualsiasi classe che implementi WindowListener (che sia un Frame o che sia una classe che deriva da Vector e che implementa WindowListener), anche se il metodo vuole un oggetto di tipo WindowListener (che è appunto un'interfaccia).

Le interfaccie, quindi, sono viste da Java esattamente come classi.

La differenza logica è esattamente quella che ha espresso Xadoom: se io voglio che due oggetti del tutto differenti possano essere passati ad un metodo, senza preoccuparmi di che tipo di oggetto siano, faccio implementare ad entrambi la stessa interfaccia e richiedo nel metodo che venga utilizzato un oggetto di tipo "interfaccia". All'interno del metodo, poi, non mi debbo preoccupare di quale tipo di oggetto sia stato passato, perchè so che comunuqe quell'oggetto possiede il/i metodo/i che a me servono per lavorarci su.


Ciao. :ciauz:

Xadoom
23-04-2004, 18:08
Esatto, io mi riferivo ad una differenza più di logica che altro. :ciauz:

folal
24-04-2004, 12:57
Vi ringrazio delle definizioni che mi avete forni, sicuramente
ora ho un po' + chiaro il tutto.

Grazie.

Loading