Ciao gente,
sapete dirmi in poche parole qual'è la differenza tra classi astratte e interfacce? So che le interfacce sono intese come classi totalmente astratte...ma quindi?
Quando usare le une e quando le altre?
Ciao gente,
sapete dirmi in poche parole qual'è la differenza tra classi astratte e interfacce? So che le interfacce sono intese come classi totalmente astratte...ma quindi?
Quando usare le une e quando le altre?
Le classi astratte sono classi che:
- non possono essere istanziate (creare oggetti) ma posseggono lo stesso un costruttore, che non verrà mai usato in maniera diretta (ma dalle classi che la estendono con la chiamata super() )
- presentano metodi astratti (di cui si si scrive solo l'intestazione, mentre l'implementazione va definita obbligatoriamente nella classe che estende la classe astratta) e metodi standard
- vigono le regole classiche dell'ereditarietà (come le classi normali, non è possibile ereditare in maniera multipla)
- possono presentare campi (standard)
Le interfacce invece
- non possono essere istanziate (creare oggetti) e mi sembra che non posseggono costruttori
- si limita a dichiarare metodi (che sono implicitamente abstract) che vanno "implementati" obbligatoriamente nella classe che la "implementa"
- i metodi devono essere obbligatoriamente con visibilità public
- non presenta campi in generale, può presentare solo campi costanti
- concettualmente permette una "sorta" di ereditarietà multipla, perchè a differenza delle classi astratte, una classe derivata può implementare più interfacce!
Credo di aver elencato le principali differenze...
immagino la domanda fosse più teorica che pratica.
Ad ogni modo ti rimando ad un post che feci tempo fa in una discussione uguale
leggi
Al mio segnale... scatenate l'inferno!