Un concetto importante nella programmazione orientata agli oggetti è l'ereditarietà. Fornisce un modo per oggetti per definire le relazioni reciproche. Come suggerisce il nome, un oggetto è in grado di ereditare le caratteristiche da un altro oggetto.
In termini più concreti, un oggetto è in grado di trasmettere il proprio stato e comportamenti ai propri figli. Perché l'ereditarietà funzioni, gli oggetti devono avere caratteristiche in comune tra loro.
Nel Giava, le classi possono essere prese da altre classi, che possono essere prese da altre e così via. Questo perché possono ereditare funzionalità dalla classe sopra di essa, fino alla classe Object più in alto.
Un esempio di eredità Java
Diciamo che facciamo una classe chiamata Human che rappresenta le nostre caratteristiche fisiche. È una classe generica che potrebbe rappresentare te, me o chiunque nel mondo. Il suo stato tiene traccia di cose come il numero di gambe, il numero di braccia e il gruppo sanguigno. Ha comportamenti come mangiare, dormire e camminare.
L'essere umano è buono per avere un'idea generale di ciò che ci rende tutti uguali, ma non può, ad esempio, parlarmi delle differenze di genere. Per questo, avremmo bisogno di creare due nuovi tipi di classe chiamati Man and Woman. Lo stato e i comportamenti di queste due classi differiranno l'uno dall'altro in molti modi ad eccezione di quelli che ereditano dall'umano.
Pertanto, l'ereditarietà ci consente di comprendere lo stato e i comportamenti della classe genitore nel suo figlio. La classe figlio può quindi estendere lo stato e i comportamenti per riflettere le differenze che rappresenta. L'aspetto più importante di questo concetto da ricordare è che la classe figlio è una versione più specializzata del genitore.
Cos'è una Superclass?
Nella relazione tra due oggetti, una superclasse è il nome dato alla classe da cui viene ereditata. Sembra una classe super duper, ma ricorda che è la versione più generica. I nomi migliori da usare potrebbero essere la classe base o semplicemente la classe genitore.
Per fare un esempio più reale questa volta, potremmo avere una superclasse chiamata Person. Il suo stato contiene il nome, l'indirizzo, l'altezza e il peso della persona e ha comportamenti come fare shopping, fare il letto e guardare la TV.
Potremmo creare due nuove classi che ereditano da Persona chiamata Studente e Lavoratore. Sono versioni più specializzate perché anche se hanno nomi, indirizzi, guardano la TV e fanno shopping, hanno anche caratteristiche diverse l'una dall'altra.
Il lavoratore potrebbe avere uno stato che detiene un titolo professionale e un posto di lavoro, mentre lo studente potrebbe contenere dati su un'area di studio e un istituto di apprendimento.
Esempio di superclasse:
Immagina di definire una classe Person:
persona di classe pubblica. { }
È possibile creare una nuova classe estendendo questa classe:
il dipendente di classe pubblica estende la persona. { }
Si dice che la classe Person sia la superclasse della classe Employee.
Che cos'è una sottoclasse?
Nella relazione tra due oggetti, una sottoclasse è il nome assegnato alla classe che eredita dalla superclasse. Anche se sembra un po 'triste, ricorda che è una versione più specializzata della superclasse.
Nell'esempio precedente, Studente e Lavoratore sono le sottoclassi.
Le sottoclassi possono anche essere conosciute come classi derivate, classi figlio o classi estese.
Quante sottoclassi posso avere?
Puoi avere tutte le sottoclassi che desideri. Non ci sono limiti al numero di sottoclassi che una superclasse può avere. Allo stesso modo, non vi è alcuna limitazione al numero di livelli di eredità. Una gerarchia di classi può essere costruita su una certa area di comunanza.
In effetti, se guardi le librerie API Java vedrai molti esempi di ereditarietà. Ogni classe nelle API è ereditata da una classe chiamata java.lang. Oggetto. Ad esempio, ogni volta che usi un oggetto JFrame, sei alla fine di una lunga linea di eredità:
java.lang. Oggetto. esteso da java.awt. Componente. esteso da java.awt. Contenitore. esteso da java.awt. Finestra. esteso da java.awt. Telaio. esteso da javax.swing. JFrame.
In Java, quando una sottoclasse eredita da una superclasse, è nota come "estensione" della superclasse.
La mia sottoclasse può ereditare da molti superclassi?
No. In Java, una sottoclasse può estendere solo una superclasse.
Perché usare l'ereditarietà?
L'ereditarietà consente ai programmatori di riutilizzare il codice che hanno già scritto. Nell'esempio della classe Umana, non abbiamo bisogno di creare nuovi campi nella classe Uomo e Donna per contenere il gruppo sanguigno perché possiamo usare quello ereditato dalla classe Umana.
Un altro vantaggio dell'utilizzo dell'ereditarietà è che ci consente di trattare una sottoclasse come se fosse una superclasse. Ad esempio, supponiamo che un programma abbia creato più istanze degli oggetti Man and Woman. Potrebbe essere necessario che il programma chiami il comportamento del sonno per tutti questi oggetti. Poiché il comportamento del sonno è un comportamento della superclasse Umana, possiamo raggruppare insieme tutti gli oggetti Uomo e Donna e trattarli come se fossero oggetti Umani.