Un concetto importante nella programmazione orientata agli oggetti è l'ereditarietà. Fornisce un modo per gli oggetti di definire 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.
In Java, 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.
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'essere 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.
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 conservare i dati su un'area di studio e un istituto di apprendimento.
Immagina di definire una classe Person:
public class Person
È 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.