what is inheritance java tutorial with examples
Tento výukový program vysvětluje koncept dědičnosti v Javě, související pojmy jako klíčová slova „rozšiřuje“ a „super“, podtřída, nadtřída, vztahy Is-A, HAS-A atd .:
Poté, co jsme se dozvěděli o třech pilířích OOP, konkrétně o abstrakci, zapouzdření a polymorfismu v Javě, se dostáváme k poslednímu pilíři OOP, tj. Dědičnosti.
Počínaje tímto tutoriálem probereme dědičnost v Javě v příštích několika cvičeních.
=> Přečtěte si řadu Easy Java Training Series.
Co se naučíte:
Dědičnost v Javě
Dědičnost v Javě lze definovat jako techniku nebo proces, při kterém jeden objekt třídy získává chování a vlastnosti jiného objektu. To se dědí zděděním třídy nebo vytvořením vztahu mezi dvěma třídami.
Například, žába je obojživelník. Stejně jako ostatní zvířata třídy obojživelníků může mít Žába mnoho vlastností, které jsou společné ostatním zvířatům. Takže obojživelník je druh a zvířata jako žáby jsou jeho členy.
Pokud musíme reprezentovat druh obojživelníka a jeho členy v softwarové reprezentaci pomocí OOP, pak uděláme to, že vyvineme třídu „Obojživelník“ obsahující vlastnosti nebo chování, které jsou obojživelníkům společné.
Tímto způsobem nemusíme duplikovat společné vlastnosti a chování pro každé obojživelníky, které popisujeme. Přímo vytvoříme třídu pro obojživelníky a zdědí z třídy obojživelníků, jak je uvedeno níže.
Obecnou myšlenkou funkce „Dědičnost“ je tedy to, že můžeme vytvářet nové třídy zděděním z již existujících tříd. Zděděním z již existujících tříd získáme vlastnosti a chování těchto tříd. Kromě toho můžeme do naší nové třídy přidat další vlastnosti nebo chování.
Funkce dědičnosti zobrazuje „ rodič-dítě „Spojení nebo vztah v Javě. Třída, ze které se nová třída dědí, se nazývá „ Rodičovská třída „Zatímco nová třída se nazývá„ Dětská třída “.
Dědičnost se používá hlavně:
- Pro přepsání metody abychom mohli dosáhnout běhový polymorfismus .
- Na znovu použít kód . Zděděním z již existujících tříd zajistíme opakovaná použitelnost kódu.
Běžná terminologie používaná v dědičnosti
- Opakovaná použitelnost: Mechanismus, kterým nové třídy znovu používají pole nebo vlastnosti a metody existující třídy.
- Třída: Třída je kolekce objektů, které mají společné vlastnosti. Třídu lze zobrazit jako šablonu nebo modrotisk pro objekty.
- Podtřída / podřízená třída: Třída, která dědí z jiné třídy, je podtřída nebo podřízená třída nebo odvozená třída.
- Super třída / rodičovská třída: Třída, která je zděděna jinou třídou k získání vlastností a metod, se nazývá nadřazená třída nebo nadtřída nebo základní třída.
Následující hierarchie dědičnosti je příkladem zobrazujícím nadtřídu a podtřídu.
Máme třídu Employee s poli OrganisationName a EmployeeId. Může mít také další pole, například jméno zaměstnance, oddělení a další podrobnosti o zaměstnanci.
Poté odvodíme další třídu s názvem „SoftwareDeveloper“ s platem a výhodami v oboru. Třída SoftwareDeveloper třída dědí z třídy Employee, a proto také získává vlastnosti třídy Employee.
Jak je znázorněno ve výše uvedeném diagramu, zde je třída zaměstnanců třída Super nebo Base a SoftwareDeveloper je podtřída nebo odvozená třída.
„Rozšiřuje“ klíčové slovo v Javě
V Javě se pro zdědění třídy používá klíčové slovo „extends“.
Obecná syntaxe dědičnosti Java je uvedena níže:
class SubClass extends SuperClass { //subclass methods and fields }
Jak je uvedeno výše, klíčové slovo „extends“ se objeví za názvem třídy v syntaxi deklarace třídy.
Klíčové slovo „rozšiřuje“ znamená, že vytváříme novou třídu „podtřídu“, která zdědí vlastnosti a chování po „třídě“. Jinými slovy klíčové slovo extends naznačuje, že stavíme novou třídu podtřídy na existující funkčnosti třídy SuperClass.
Dědičnost implementovaná klíčovým slovem „extends“ je dědičnost třídy. V dalším tutoriálu probereme další klíčové slovo „implementuje“, pomocí kterého můžeme zdědit rozhraní.
Příklad třídy Employee-SoftwareDeveloper, kterou jsme vysvětlili výše, lze představit jako:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
Vztah IS-A a HAS-A
Zvažte následující strukturu třídy:
class Mammal{ } class Cow extends Mammal{ }
Jak tedy můžeme interpretovat výše uvedenou strukturu? Jak třída Kráva rozšiřuje nebo zdědí Savec, můžeme říci „Kráva JE Savec “nebo„ Kráva JE to druh Savec'. Proto kdykoli vyjádříme takové vztahy, tento konkrétní vztah je vztah „IS_A“.
Ve výše uvedené struktuře jsme hierarchii dědičnosti použili k vyjádření skutečnosti, že jeden druh je jiného druhu. Ve výše uvedené struktuře jsme tedy použili dědictví k označení vztahu mezi Krávou a Savcem.
Podobně můžeme vyjádřit některé další vztahy IS-A následovně:
Výše je uvedeno několik běžných příkladů vztahů, které můžeme vyjádřit pomocí dědičnosti v Javě.
Obecně lze druh vztahu IS-A vyjádřit pomocí dědičnosti.
Nyní se podívejme na příklad níže:
Ve výše uvedeném diagramu vidíme, že vozidlo má dvě části, tj. Motor a brzdu. Jak tedy můžeme tento scénář vyjádřit slovy?
Můžeme říci, že „vozidlo obsahuje motor a vozidlo obsahuje brzda “.
To, co zde vyjadřujeme, tedy není vztah „IS-A“, ale vztah zadržování, ve kterém určujeme jeden objekt jako součást jiného objektu.
Co je soubor SWF?
Ve výše uvedeném příkladu je motor a část vozidlo. Není to „ druh „Vozidlo. To je ' MÁ “Nebo vztah zadržení nebo složení v Javě. Vztah Has-a v Javě je vyjádřen zahrnutím objektu jako člena třídy.
Pokud tedy postupujeme podle stejného příkladu výše uvedeného vozidla, můžeme to vyjádřit takto:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Takže vozidlo má motor a brzdu. Vyjádřením vztahu výše uvedeným způsobem nás nezajímá interní implementace motoru nebo brzdy. Třída vozidla nechá třídy motorů a brzd vědět, co je potřeba, a tyto třídy to zajistí.
Stejně jako vztah IS-A je vztah HAS-A také užitečný při opětovném použití kódu.
V tomto kurzu se budeme podrobně zabývat dědičností (IS-A) a v dalším kurzu budeme diskutovat o zadržení nebo složení (HAS-A).
Příklad dědičnosti Java
Implementujme jednoduchý příklad v Javě, abychom demonstrovali dědičnost.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
Výstup:
Výše uvedený program ukazuje jednoduchý příklad dědičnosti. Je deklarována BaseClass s jednou metodou. Pak je deklarována další třída DerivedClass, která rozšiřuje BaseClass. Tato třída má také jednu metodu.
V hlavní metodě programu vytvoříme objekt DerivedClass a pomocí tohoto objektu zavoláme BaseClass stejně jako metodu DerivedClass.
Výstup zobrazuje zprávy vytištěné oběma metodami. Jako DerivedClass rozšiřuje BaseClass a BaseClass metoda je veřejná, je viditelná pro DerivedClass.
„Super“ klíčové slovo v Javě
V dědičnosti se zabýváme nadtřídami nebo nadřazenými třídami a podřízenými třídami. Pokud musíme zprostředkovaně přistupovat k členům nadtřídy včetně proměnných, metod nebo konstruktorů, musíme mít nějaký mechanismus. Tento mechanismus přístupu k členům základní třídy je poskytován v Javě pomocí klíčového slova „super“.
Ve kterých scénářích tedy použijeme klíčové slovo „super“ v Javě?
Níže jsou uvedeny scénáře, ve kterých může být užitečné klíčové slovo „super“.
- Když mají super / základní třída a sub / odvozená třída pro členy stejná jména a chceme získat přístup ke členům nadtřídy, použijeme klíčové slovo super.
- Když chceme získat přístup k konstruktoru nadtřídy z podtřídy, použijeme klíčové slovo super k vyvolání klíčového slova superclass.
Na výše uvedeném obrázku jsme ukázali strukturu dědičnosti. V základní i odvozené třídě máme String proměnnou myStr. V odvozené třídě máme funkci printStr (). V této metodě jsme použili klíčové slovo „super“ pro přístup k proměnné myStr ze základní třídy.
Na obrázku jsme ukázali šipky směřující k členské proměnné základní třídy a odvozené proměnné třídy.
Nyní se podívejme na příklady programování použití klíčového slova super pro přístup k různým členům nadtřídy.
# 1) Přístup k proměnné člena nadtřídy
Následující program Java demonstruje použití klíčového slova „super“ pro přístup k proměnným ze základní třídy.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
Výstup:
Výše uvedený program ukazuje, jak přistupovat k členským proměnným základní třídy z odvozené třídy, když jsou členské proměnné deklarovány se stejným názvem v základní i odvozené třídě se stejným názvem.
Zde máme proměnnou myStr, která je deklarována v základní i odvozené třídě. V metodě printdetails odkazujeme na proměnnou myStr základní třídy pomocí „super.myStr“, zatímco k odvozené proměnné třídy myStr se přistupuje přímo bez jakéhokoli kvalifikátoru.
# 2) Přístup k metodě nadtřídy
Dále uvidíme, jak zavolat metodu základní třídy, když metoda v základní třídě a metoda v odvozené třídě mají stejné názvy.
Následující program to ukazuje.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
Výstup:
# 3) Přístup k konstruktoru nadtřídy
Když zdědíme jednu třídu od druhé, všimněte si, že konstruktory nejsou zděděny.
Pokud chceme provést nějaké instrukce z konstruktorů nadtřídy před provedením konstruktoru odvozené třídy, můžeme také zavolat konstruktor nadtřídy pomocí klíčového slova „super“.
Pro volání konstruktoru nadtřídy používáme volání metody.
super (seznam parametrů ...)
Následující metoda ukazuje přístup k super konstruktorům v Javě.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
Výstup:
Jak vidíme z výše uvedeného programu, zavolali jsme konstruktoru nadtřídy z konstruktoru odvozené třídy. Všimněte si, že podle konvence, kdykoli chceme získat přístup ke konstruktoru nadtřídy, měl by to být první příkaz v konstruktoru odvozené třídy.
Protože základní třída má parametrizovaný konstruktor, při volání konstruktoru předáme příslušný parametr také super volání.
Pokud není provedeno žádné explicitní volání super konstruktoru, jak je uvedeno výše, pak kompilátor vždy automaticky přidá implicitní volání super (). Ale všimněte si, že to bude volání výchozího konstruktoru nadtřídy.
Často kladené otázky
Otázka č. 1) Co je dědičnost v Javě?
Odpovědět: Proces, kterým jedna třída získává vlastnosti a chování jiné třídy, se nazývá dědičnost. V Javě je jedna třída zděděna jinou třídou pomocí klíčového slova „extends“.
Dědičnost podporuje opětovnou použitelnost kódu, protože zděděním můžeme získat a použít již existující vlastnosti a chování zděděné třídy, aniž bychom museli psát duplicitní kód.
Otázka 2) Proč se v Javě používá dědičnost?
Odpovědět: Dědičnost se používá hlavně ke zlepšení opětovné použitelnosti aplikace. Pomocí dědičnosti můžeme v naší aplikaci použít připravené třídy. Pokud máme tuto funkci připravenou, nemusíme psát náš kód.
Druhé použití dědičnosti spočívá v přepsání metody. K implementaci runtime polymorfismu využíváme dědičnost.
Otázka č. 3) Jaké jsou výhody dědičnosti?
Odpovědět: Opakovaná použitelnost je klíčovou výhodou dědičnosti. Sdílení kódu prostřednictvím dědičnosti také vede k lepší čitelnosti a lepší organizaci kódu.
Můžeme také dosáhnout běhového polymorfismu pomocí přepsání metody pomocí dědičnosti.
Otázka č. 4) Jaké jsou vlastnosti dědičnosti?
Odpovědět: Jakákoli charakteristika nebo vlastnost získaná od starší generace se dědí dědičností. Například, vlastnost light-eye, která se vyskytuje v mnoha rodinách, je příkladem dědictví.
Z hlediska programování poskytuje dědičnost funkci opětovného použití a přepsání metody.
Otázka č. 5) Je super () nutná?
Odpovědět: Ne. Protože pokud nebudeme volat super (), kompilátor to za nás udělá implicitně. Ale implicitní vyvolání super () je výchozí konstruktor základní třídy. Takže pokud potřebujeme parametrizovaný konstruktor ze základní třídy, měli bychom jej zavolat explicitně.
k čemu se dnes používá java
Závěr
V tomto kurzu jsme představili koncept dědičnosti v Javě. Dědičnost je proces získávání vlastností a chování jedné třídy v jiné třídě. Zde jsme diskutovali o základní definici a terminologii, kterou používáme v dědičnosti.
Také jsme diskutovali o vztazích Is-A a Has-A v Javě. Dědičnost se používá k implementaci vztahu Is-A.
Poté jsme diskutovali o klíčových slovech „extends“ a „super“ v Javě, která se používají v souvislosti s dědičností. Extends se používá k implementaci dědičnosti. Klíčové slovo super se používá k označení konstruktoru, metody nebo proměnné základní třídy z odvozené třídy.
=> Podívejte se na průvodce Perfect Java Training Guide zde.
Doporučené čtení
- Výukový program třídy skeneru Java s příklady
- Co je Java Vector | Výukový program Java Vector Class s příklady
- Java Enum: Výukový program Java Enumeration s příklady
- Metoda délky Java String () S příklady
- Výukový program Java Float s příklady programování
- Dědičnost v C ++
- Druhy dědičnosti v C ++
- Koncepty OOP Pythonu (třídy, objekty a dědičnost Pythonu)