Quello che dici è perfetto... solo che Java non distingue così fortemente tra interfaccia e classe madre.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.![]()
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.![]()



Rispondi quotando