Cos'è l'ereditarietà?
L'ereditarietà è un meccanismo in cui una classe acquisisce la proprietà di un'altra classe. Ad esempio, un bambino eredita i tratti dei suoi genitori. Con l'ereditarietà, possiamo riutilizzare i campi e i metodi della classe esistente. Quindi, l'ereditarietà facilita la riusabilità ed è un concetto importante di OOP.
In questo tutorial imparerai-
- Tipi di ereditarietà
- Ereditarietà in Java
- Esempio di ereditarietà Java
- Super parola chiave
- Impara l'ereditarietà in OOP con l'esempio
Tipi di ereditarietà
Esistono vari tipi di ereditarietà in Java:
Ereditarietà singola:
In Single Inheritance una classe estende un'altra classe (solo una classe).

Nel diagramma sopra, la classe B estende solo la classe A. La classe A è una super classe e la classe B è una sottoclasse.
Ereditarietà multipla:
In Multiple Inheritance, una classe che estende più di una classe. Java non supporta l'ereditarietà multipla.

Come da diagramma sopra, la Classe C estende la Classe A e la Classe B.
Ereditarietà multilivello:
In Multilevel Inheritance, una classe può ereditare da una classe derivata. Quindi, la classe derivata diventa la classe base per la nuova classe.

Come mostrato nel diagramma, la Classe C è una sottoclasse di B e B è una sottoclasse di Classe A.
Ereditarietà gerarchica:
In Hierarchical Inheritance, una classe viene ereditata da molte sottoclassi.

Come nell'esempio precedente, le classi B, C e D ereditano la stessa classe A.
Ereditarietà ibrida:
L'ereditarietà ibrida è una combinazione di eredità singola e multipla.

Come nell'esempio precedente, tutti i membri pubblici e protetti della Classe A vengono ereditati nella Classe D, prima tramite la Classe B e in secondo luogo tramite la Classe C.
Nota: Java non supporta l'ereditarietà ibrida / multipla
Ereditarietà in Java
JAVA INHERITANCE è un meccanismo in cui una classe acquisisce la proprietà di un'altra classe. In Java, quando esiste una relazione "Is-A" tra due classi, utilizziamo l'ereditarietà. La classe genitore è chiamata super classe e la classe ereditata è chiamata sottoclasse. La parola chiave
extends
viene utilizzato dalla sottoclasse per ereditare le caratteristiche della superclasse.
L'ereditarietà è importante poiché porta alla riusabilità del codice.
Sintassi dell'ereditarietà Java:
class subClass extends superClass{//methods and fields}
Esempio di ereditarietà Java
class Doctor {void Doctor_Details() {System.out.println("Doctor Details… ");}}class Surgeon extends Doctor {void Surgeon_Details() {System.out.println("Surgen Detail… ");}}public class Hospital {public static void main(String args[]) {Surgeon s = new Surgeon();s.Doctor_Details();s.Surgeon_Details();}}
Super parola chiave
La parola chiave super è simile alla parola chiave "questo".
La parola chiave super può essere utilizzata per accedere a qualsiasi membro di dati o metodi della classe genitore.
La parola chiave Super può essere utilizzata a livello di variabile, metodo e costruttore.
Sintassi:
super.();
Impara l'ereditarietà in OOP con l'esempio
Considera la stessa applicazione bancaria dell'esempio precedente.
Dovremmo aprire due diversi tipi di conto, uno per il risparmio e un altro per il controllo (noto anche come corrente).
Confrontiamo e studiamo come possiamo affrontare la codifica da una prospettiva di programmazione strutturata e orientata agli oggetti. Approccio strutturale : nella programmazione strutturata creeremo due funzioni:
- Uno da ritirare
- E l'altro per l'azione di deposito.
Poiché il funzionamento di queste funzioni rimane lo stesso in tutti i conti.
Approccio OOP : durante l'utilizzo dell'approccio di programmazione OOP. Creeremmo due classi.
- Ognuno ha l'implementazione delle funzioni di deposito e prelievo.
- Ciò ridonderà il lavoro extra.
Richiesta di modifica nel software
Ora c'è un cambiamento nella specifica dei requisiti per qualcosa che è così comune nell'industria del software. Dovresti aggiungere la funzionalità Conto bancario privilegiato con la funzione di scoperto. Per uno sfondo, lo scoperto è una struttura in cui è possibile prelevare un importo superiore a quello disponibile sul saldo del proprio conto.
Approccio strutturale: utilizzando l'approccio funzionale, devo modificare la mia funzione di ritiro, che è già testata e di base. E aggiungere un metodo come di seguito si prenderà cura dei nuovi requisiti.
Approccio OOP: utilizzando l'approccio OOP, devi solo scrivere una nuova classe con un'implementazione unica della funzionedraw. Non abbiamo mai toccato il pezzo di codice testato.
Un'altra richiesta di modifica
Cosa succede se il requisito cambia ulteriormente? Mi piace aggiungere un conto di carta di credito con il proprio requisito unico di depositi .
Approccio strutturale: utilizzando l'approccio strutturale è necessario modificare nuovamente la parte testata del codice di deposito.
Approccio OOP : ma usando l'approccio orientato agli oggetti, creerai semplicemente una nuova classe con la sua implementazione unica del metodo di deposito (evidenziato in rosso nell'immagine sotto).
Quindi, anche se inizialmente la programmazione strutturale sembra un approccio facile, l'OOP vince a lungo termine.
Vantaggio dell'ereditarietà negli OOP
Ma si potrebbe obiettare che in tutte le classi ci sono parti di codice ripetute.
Per ovviare a questo, crei una classe genitore, dì "account" e implementa la stessa funzione di deposito e prelievo. E rendi le classi figlie ereditate dalla classe "account". In questo modo avranno accesso alle funzioni di prelievo e deposito nella classe conto.
Le funzioni non devono essere implementate individualmente. Questa è l' eredità in java. .