D4rkAng3l
15-05-2009, 19:31
Mi dite se quello che ho capito è tutto corretto o se mi manca qualcosa?
In Java per definire una gerarchia di tipi come prima cosa si definisce il tipo che è alla sommità di tale gerarchia (tramite una classe) che verrà esteso da sottoclassi.
Tale tipo alla sommità della gerarchia potrà essere una classe concreta, una classe abstract (cioè una classe che contiene uno o più metodi abstract non implementati e che saranno implementati nelle varie sottoclassi per rispondere a specifiche rappresentazioni) o un'interface (che è una classe che contiene tutti e soli metodi abstract).
Una classe concreta implementa competamente di un tipo ed estendendola vengono ereditate anche tutte le sue variabili di istanza a cui si possono aggiungere nuove variabili di istanza della classe che eredita mentre una classe abastract è una implementazione parziale.
Sia che estenda una classe concreta che estanda una classe abatract posso fare l'overriding dei metodi della classe padre (mantenendo la stessa signature) ed andando ad estendere una classe abstract fornisco per ogni sottoclasse ua specifica implementazione dei metodi abstract.
In una sottoclasse posso aggiungere particolari metodi non presenti nella sua superclasse. Invece è da evitare il cambiare il comportamento semantico di un metodo implementato nella superclasse perchè ci dovrebbe far riflettere che forse si tratta di tipi di dato troppo diversi e che l'estensione non èuna buona scelta.
C'è qualcosa di sbagliato o mi manca qualcosa?
DOMANDA stupida: Ma se io ho la mia superclasse concreta da cui estendo tante sottoclassi ed in ogni sottoclasse faccio un completo override di tutti i metodi è la stessa cosa di avere una superclasse dichiarata come interface ed implementare ongi metodo nelle sottoclassi? (apparte l'estrema scomodità del primo caso però potrei ottenere lo stesso risultato?)
Grazie
Andrea
In Java per definire una gerarchia di tipi come prima cosa si definisce il tipo che è alla sommità di tale gerarchia (tramite una classe) che verrà esteso da sottoclassi.
Tale tipo alla sommità della gerarchia potrà essere una classe concreta, una classe abstract (cioè una classe che contiene uno o più metodi abstract non implementati e che saranno implementati nelle varie sottoclassi per rispondere a specifiche rappresentazioni) o un'interface (che è una classe che contiene tutti e soli metodi abstract).
Una classe concreta implementa competamente di un tipo ed estendendola vengono ereditate anche tutte le sue variabili di istanza a cui si possono aggiungere nuove variabili di istanza della classe che eredita mentre una classe abastract è una implementazione parziale.
Sia che estenda una classe concreta che estanda una classe abatract posso fare l'overriding dei metodi della classe padre (mantenendo la stessa signature) ed andando ad estendere una classe abstract fornisco per ogni sottoclasse ua specifica implementazione dei metodi abstract.
In una sottoclasse posso aggiungere particolari metodi non presenti nella sua superclasse. Invece è da evitare il cambiare il comportamento semantico di un metodo implementato nella superclasse perchè ci dovrebbe far riflettere che forse si tratta di tipi di dato troppo diversi e che l'estensione non èuna buona scelta.
C'è qualcosa di sbagliato o mi manca qualcosa?
DOMANDA stupida: Ma se io ho la mia superclasse concreta da cui estendo tante sottoclassi ed in ogni sottoclasse faccio un completo override di tutti i metodi è la stessa cosa di avere una superclasse dichiarata come interface ed implementare ongi metodo nelle sottoclassi? (apparte l'estrema scomodità del primo caso però potrei ottenere lo stesso risultato?)
Grazie
Andrea