Wat is erfenis?
Overerving is een mechanisme waarbij de ene klasse het eigendom van een andere klasse verwerft. Een kind erft bijvoorbeeld de eigenschappen van zijn / haar ouders. Met overerving kunnen we de velden en methoden van de bestaande klasse hergebruiken. Daarom vergemakkelijkt overerving herbruikbaarheid en is het een belangrijk concept van OOP's.
In deze tutorial leer je-
- Soorten erfenis
- Overerving in Java
- Voorbeeld van overerving van Java
- Super sleutelwoord
- Leer overerving in OOP's met voorbeeld
Soorten erfenis
Er zijn verschillende soorten overerving in Java:
Enige erfenis:
In Single Inheritance breidt de ene klasse een andere klasse uit (slechts één klasse).
In het bovenstaande diagram breidt Klasse B alleen Klasse A uit. Klasse A is een superklasse en Klasse B is een subklasse.
Meerdere overerving:
In Multiple Inheritance, een klasse die meer dan één klasse uitbreidt. Java ondersteunt geen meervoudige overerving.
Zoals in het bovenstaande diagram, breidt Klasse C zowel Klasse A als Klasse B uit.
Overerving op meerdere niveaus:
In Overerving op meerdere niveaus kan één klasse erven van een afgeleide klasse. Daarom wordt de afgeleide klasse de basisklasse voor de nieuwe klasse.
Zoals aangegeven in diagram Klasse C is een subklasse van B en B is een van subklasse Klasse A.
Hiërarchische overerving:
In hiërarchische overerving wordt één klasse overgeërfd door vele subklassen.
Zoals in het bovenstaande voorbeeld, erven Klasse B, C en D dezelfde klasse A.
Hybride overerving:
Hybride overerving is een combinatie van enkelvoudige en meervoudige overerving.
Zoals in het bovenstaande voorbeeld, worden alle openbare en beschermde leden van Klasse A geërfd in Klasse D, eerst via Klasse B en ten tweede via Klasse C.
Opmerking: Java ondersteunt geen hybride / meervoudige overerving
Overerving in Java
JAVA-ERFENIS is een mechanisme waarbij de ene klasse het eigendom van een andere klasse verwerft. Als er in Java een "Is-A" -relatie bestaat tussen twee klassen, gebruiken we Inheritance. De bovenliggende klasse wordt een superklasse genoemd en de overgeërfde klasse wordt een subklasse genoemd. Het sleutelwoord
extends
wordt gebruikt door de subklasse om de kenmerken van de superklasse te erven.
Overerving is belangrijk omdat het leidt tot herbruikbaarheid van code.
Syntaxis van Java-overerving:
class subClass extends superClass{//methods and fields}
Voorbeeld van overerving van 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 sleutelwoord
Het super sleutelwoord is vergelijkbaar met "dit" sleutelwoord.
Het sleutelwoord super kan worden gebruikt om toegang te krijgen tot elk gegevenslid of methoden van de bovenliggende klasse.
Supersleutelwoord kan worden gebruikt op variabel, methode- en constructorniveau.
Syntaxis:
super.();
Leer overerving in OOP's met voorbeeld
Beschouw dezelfde banktoepassing uit het vorige voorbeeld.
Het is de bedoeling dat we twee verschillende accounttypes openen, een om te sparen en een ander om te controleren (ook bekend als huidig).
Laten we eens kijken hoe we codering kunnen benaderen vanuit een gestructureerd en objectgeoriënteerd programmeerperspectief. Structurele aanpak : bij gestructureerd programmeren zullen we twee functies creëren -
- Een om terug te trekken
- En de andere voor stortingsactie.
Omdat de werking van deze functies in alle accounts hetzelfde blijft.
OOP's benadering : tijdens het gebruik van de OOP-programmeerbenadering. We zouden twee klassen maken.
- Elk met implementatie van de stortings- en intrekkingsfuncties.
- Dit zal extra werk overbodig maken.
Wijzigingsverzoek in software
Nu is er een verandering in de specificatie van vereisten voor iets dat zo gebruikelijk is in de software-industrie. Het is de bedoeling dat u een geprivilegieerde bankrekening met een kredietfaciliteit toevoegt. Voor een achtergrond is rood staan een faciliteit waarbij u een hoger bedrag kunt opnemen dan het beschikbare saldo op uw rekening.
Structurele benadering: met behulp van een functionele benadering moet ik mijn intrekkingsfunctie aanpassen, die al is getest en gebaseerd. En als u een methode zoals hieronder toevoegt, zorgt u voor nieuwe vereisten.
OOP's benadering: Met behulp van de benadering van OOP hoeft u alleen maar een nieuwe klasse te schrijven met een unieke implementatie van de intrekkingsfunctie. We hebben het geteste stukje code nooit aangeraakt.
Nog een wijzigingsverzoek
Wat als de eis verder verandert? Graag een creditcardaccount toevoegen met zijn eigen unieke vereiste van stortingen .
Structurele aanpak: Met behulp van een structurele aanpak moet u het geteste stuk aanbetalingscode opnieuw wijzigen.
OOP's benadering : Maar door een objectgeoriënteerde benadering te gebruiken, creëer je gewoon een nieuwe klasse met zijn unieke implementatie van de stortingsmethode (rood gemarkeerd in de afbeelding hieronder).
Dus hoewel de structurele programmering aanvankelijk een gemakkelijke aanpak lijkt, wint OOP op lange termijn.
Voordeel van overerving in OOP's
Maar je zou kunnen zeggen dat je in alle klassen herhaalde stukjes code hebt.
Om dit te verhelpen, maakt u een bovenliggende klasse aan, zegt u "account" en implementeert u dezelfde functie van storten en opnemen. En maak onderliggende klassen erfelijke "account" -klasse. Zodat ze toegang hebben tot opname- en stortingsfuncties in de rekeningklasse.
De functies hoeven niet afzonderlijk te worden geïmplementeerd. Dit is overerving in java.