PDA

Visualizza la versione completa : abstact vs interface


zacca94
16-04-2016, 21:35
Non ho capito anche questo argomento.

Una classe abstract con dei metodi abstract impone che gli oggetti che ereditano il tutto debbano tenere quei metodi no?

L'implementazione dell'interfaccia non fa lo stesso?

Quando dovrei usare l'uno e quando l'altro?

Grazie in anticipo

gaten
18-04-2016, 10:02
Parti dal presupposto che sia interfacce che classi astratte, non nascono per essere istanziate, ma bensė per rappresentare astrattamente il tipo base di una classe(per le classi astratte) e comportamenti comuni(interfacce).
Dal punto di vista specifico, per definire una classe astratta, basta che al suo interno hai un metodo dichiarato abstract, per le interfacce, di default, tutti i metodi sono dichiarati abstract. Inoltre in una interfaccia non vai assolutamente ad implementare i metodi, ma dichiari solo le firme dei metodi, e puoi andare a definire solo costanti (dichiarate "static final").
Una nota riguardo alle classi astratte:
In una classe astratta, potresti avere dei metodi non dichiarati abstract e fornire anche una implementazione.

In definitiva, spesso, le classi astratte le usi per astrarre il tipo base di una classe,fornendo un contratto verticale... mentre con una interfaccia vai ad astrarre i comportamenti che risultano essere in comune tra pių classi, fornendo un contratto orizzontale.. tra gli oggetti che andranno ad implementare l'interfaccia.

N.b: Questo in linea di massima, ci sono ancora tante cose da spiegare... ma basta che leggi un libro a riguardo.

k.b
18-04-2016, 15:56
Due differenze in sintesi tra abstract class e interface:

- un'abstract class oltre alle signature astratte puo' fornire l'implementazione concreta di alcuni metodi, un'interfaccia no
- una classe puo' implementare piu' interfacce, ma una sola abstract class

zacca94
19-04-2016, 03:37
Grazie per la spiegazione

Santino83_02
19-04-2016, 13:31
Un esempio frequente di classe astratta č quello di una classe base che implementa un'interfaccia e utilizza metodi astratti per consentirne la specializzazione ad una serie di classi figlio che estendono tale classe astratta. Un esempio potrebbe essere quello della lettura di un dato da pių fonti diverse: fai un'interfaccia Reader, un AbstractReader in cui sono implementate le procedure comuni e un metodo astratto "doRead", e poi lo estendi da XmlReader, YmlReader, PlainReader, etc... che implementano solo il metodo doRead a seconda del formato richiesto

Loading