what is inheritance java tutorial with examples
Tento tutoriál vysvetľuje koncept dedičnosti v Jave, súvisiace pojmy ako „rozširuje“ a „super“ kľúčové slová, podtrieda, nadtrieda, vzťahy Is-A, HAS-A atď .:
Potom, čo sme sa dozvedeli o troch pilieroch OOP, konkrétne o abstrakcii, zapuzdrení a polymorfizme v Jave, prichádzame k poslednému pilieru OOP, teda dedičnosti.
Počnúc týmto tutoriálom sa budeme v nasledujúcich pár tutoriáloch zaoberať dedičstvom v Jave.
=> Prečítajte si sériu Easy Java Training Series.
Čo sa dozviete:
Dedenie v Jave
Dedenie v Jave možno definovať ako techniku alebo proces, v ktorom jeden objekt triedy nadobúda správanie a vlastnosti iného objektu. To sa deje dedením triedy alebo nadviazaním vzťahu medzi dvoma triedami.
Napríklad, žaba je obojživelník. Rovnako ako iné zvieratá triedy obojživelníkov, aj Frog môže mať mnoho vlastností, ktoré sú spoločné s inými zvieratami. Takže tu je obojživelník druh a jeho členmi sú zvieratá ako žaby.
Ak musíme zastúpiť druh obojživelníka a jeho členov v softvérovom zastúpení pomocou OOP, potom urobíme to, že vyvinieme triedu „Obojživelník“ obsahujúcu vlastnosti alebo správanie, ktoré sú obojživelníkom všeobecne známe.
Takto nemusíme duplikovať spoločné vlastnosti a správanie pre každého obojživelníka, ktoré popisujeme. Priamo vytvoríme triedu pre obojživelníky a dedí z triedy obojživelníkov, ako je uvedené nižšie.
Všeobecnou myšlienkou funkcie „Dedičnosť“ je teda to, že môžeme vytvárať nové triedy dedením z už existujúcich tried. Dedením z už existujúcich tried začneme využívať vlastnosti a správanie týchto tried. Okrem toho môžeme do našej novej triedy pridať ďalšie vlastnosti a / alebo správanie.
Funkcia dedičstva zobrazuje „ rodič-dieťa ”Spojenie alebo vzťah v Jave. Trieda, z ktorej sa nová trieda dedí, sa nazýva „ Rodičovská trieda „Zatiaľ čo sa nová trieda nazýva„ Trieda dieťaťa “.
Dedičstvo sa používa hlavne:
- Pre prevažujúca metóda aby sme dosiahli runtime polymorfizmus .
- To kód znova použiť . Dedením z už existujúcich tried zabezpečujeme opätovná použiteľnosť kódu.
Bežná terminológia použitá v dedičstve
- Opätovná použiteľnosť: Mechanizmus, pomocou ktorého nové triedy opätovne používajú polia alebo vlastnosti a metódy existujúcej triedy.
- Trieda: Trieda je kolekcia objektov, ktoré majú spoločné vlastnosti. Triedu je možné zobraziť ako šablónu alebo modrotlač pre dané objekty.
- Podtrieda / podradená trieda: Triedou, ktorá dedí z inej triedy, je podtrieda alebo podradená trieda alebo odvodená trieda.
- Super trieda / rodičovská trieda: Trieda, ktorú dedí iná trieda na získanie vlastností a metód, sa nazýva nadradená trieda alebo nadtrieda alebo základná trieda.
Nasledujúca hierarchia dedičstva je príkladom zobrazujúcim nadtriedu a podtriedu.
Máme triedu zamestnancov s poliami OrganisationName a EmployeeId. Môže obsahovať aj ďalšie polia, napríklad meno zamestnanca, oddelenie a ďalšie podrobnosti o zamestnancovi.
Potom odvodíme ďalšiu triedu s názvom „SoftwareDeveloper“ s platom a výhodami v odbore. Trieda SoftwareDeveloper trieda dedí z triedy Employee, a teda tiež získava vlastnosti triedy Employee.
Ako je znázornené na vyššie uvedenom diagrame, tu je trieda zamestnancov trieda Super alebo Base a SoftwareDeveloper je podtrieda alebo odvodená trieda.
„Rozširuje“ kľúčové slovo v jazyku Java
V prostredí Java sa na zdedenie triedy používa kľúčové slovo „extends“.
Všeobecná syntax dedičnosti Java je uvedená nižšie:
class SubClass extends SuperClass { //subclass methods and fields }
Ako je uvedené vyššie, kľúčové slovo „extends“ sa objaví za názvom triedy v syntaxi deklarácie triedy.
Kľúčové slovo „predlžuje“ naznačuje, že vytvárame novú triedu „podtrieda“, ktorá zdedí vlastnosti a správanie po „triede“. Inými slovami, kľúčové slovo extends naznačuje, že staviame novú triedu podtriedy na existujúcej funkcii triedy SuperClass.
Dedičstvo implementované pomocou kľúčového slova „extends“ je dedičstvo triedy. V nasledujúcom tutoriáli si rozoberieme ďalšie kľúčové slovo „implementuje“, pomocou ktorého môžeme dediť rozhrania.
Príklad triedy Employee-SoftwareDeveloper, ktorý sme vysvetlili vyššie, možno predstaviť ako:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
Vzťah IS-A a HAS-A
Zvážte nasledujúcu štruktúru triedy:
class Mammal{ } class Cow extends Mammal{ }
Ako teda môžeme interpretovať vyššie uvedenú štruktúru? Keď trieda Kravy rozširuje alebo dedí Cicavce, môžeme povedať „Krava JE A Cicavec “alebo„ Krava JE to druh Cicavec “. Preto vždy, keď vyjadrujeme také vzťahy, tento konkrétny vzťah je vzťahom „IS_A“.
Vo vyššie uvedenej štruktúre sme pomocou dedičnej hierarchie vyjadrili skutočnosť, že jeden druh je iného druhu. Vo vyššie uvedenej štruktúre sme teda pomocou dedičstva označili vzťah medzi kravou a cicavcom.
Podobne môžeme vyjadriť niektoré ďalšie vzťahy IS-A nasledovne:
Vyššie je uvedených niekoľko bežných príkladov vzťahov, ktoré môžeme vyjadriť pomocou dedičnosti v Jave.
Všeobecne možno vzťahy IS-A vyjadriť pomocou dedičnosti.
Teraz si ukážeme príklad:
Na vyššie uvedenom diagrame vidíme, že vozidlo má dve časti, tj motor a brzdu. Ako teda môžeme tento scenár vyjadriť slovami?
Môžeme povedať, že „Vozidlo obsahuje motor a vozidlo obsahuje brzda “.
To, čo tu vyjadrujeme, teda nie je vzťah „IS-A“, ale vzťah s obmedzením, v ktorom jeden objekt špecifikujeme ako súčasť iného objektu.
ako spustiť súbor json
Vo vyššie uvedenom príklade je motor a časť vozidlo. Nie je to „ druh ”Vozidlo. To je ' MÁ ”Alebo vzťah zadržania alebo zloženia v Jave. Vzťah Has-a v Jave je vyjadrený zahrnutím objektu ako člena triedy.
Ak teda postupujeme podľa rovnakého príkladu vozidla vyššie, môžeme to vyjadriť takto:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Takže vozidlo má motor a brzdu. Vyjadrením vzťahu vyššie uvedeným spôsobom nás nezaujíma vnútorná implementácia motora alebo brzdy. Trieda vozidla dá triedam motorov a bŕzd vedieť, čo je potrebné, a tieto triedy to zabezpečia.
Rovnako ako vzťah IS-A, aj vzťah HAS-A je užitočný pri opätovnom použití kódu.
V tomto výučbe sa budeme podrobne zaoberať dedičnosťou (IS-A) a v ďalšom výučbe sa budeme zaoberať obmedzením alebo zložením (HAS-A).
Príklad dedičnosti Java
Implementujme jednoduchý príklad v Jave, aby sme demonštrovali dedičnosť.
//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ýkon:
Vyššie uvedený program ukazuje jednoduchý príklad dedičstva. Je deklarovaná BaseClass s jednou metódou. Potom je deklarovaná iná trieda DerivedClass, ktorá rozširuje BaseClass. Táto trieda má tiež jednu metódu.
V hlavnej metóde programu vytvoríme objekt DerivedClass a pomocou tohto objektu zavoláme BaseClass ako aj metódu DerivedClass.
Výstup zobrazuje správy vytlačené oboma metódami. Pretože DerivedClass rozširuje BaseClass a metóda BaseClass je verejná, je pre DerivedClass viditeľná.
„Super“ kľúčové slovo v jazyku Java
Pri dedení sa zaoberáme nadtriedami alebo nadradenými triedami a podradenými triedami. Ak musíme sprostredkovať prístup k členom nadtriedy vrátane premenných, metód alebo konštruktorov, musíme mať nejaký mechanizmus. Tento mechanizmus prístupu k členom základnej triedy sa poskytuje v Jave pomocou kľúčového slova „super“.
V ktorých scenároch teda použijeme kľúčové slovo „super“ v Jave?
Nižšie sú uvedené scenáre, v ktorých môže byť užitočné kľúčové slovo „super“.
- Keď majú super / základná trieda a sub / odvodená trieda rovnaké názvy pre členov a chceme získať prístup k členom nadtriedy, použijeme kľúčové slovo super.
- Keď chceme získať prístup k konštruktoru nadtriedy z podtriedy, potom pomocou kľúčového slova super vyvoláme kľúčové slovo superclass.
Na vyššie uvedenom obrázku sme ukázali štruktúru dedičstva. V základnej aj odvodenej triede máme String premennú myStr. V odvodenej triede máme funkciu printStr (). V tejto metóde sme použili kľúčové slovo „super“ na prístup k premennej myStr zo základnej triedy.
Na obrázku sme ukázali šípky smerujúce k premennej člena základnej triedy a premennej odvodenej triedy.
Teraz si ukážeme programovacie príklady použitia kľúčového slova super na prístup k rôznym členom nadtriedy.
# 1) Prístup k premennej člena nadtriedy
Nasledujúci program Java demonštruje použitie kľúčového slova „super“ na prístup k premenným zo základnej triedy.
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ýkon:
Vyššie uvedený program ukazuje, ako získať prístup k členským premenným základnej triedy z odvodenej triedy, keď sú členské premenné deklarované s rovnakým názvom v základnej aj odvodenej triede.
Tu máme premennú myStr, ktorá je deklarovaná v základnej aj odvodenej triede. V metóde printdetails odkazujeme na premennú myStr základnej triedy pomocou „super.myStr“, zatiaľ čo k odvodenej premennej triedy myStr sa pristupuje priamo bez kvalifikátora.
# 2) Prístup k metóde nadtriedy
Ďalej uvidíme, ako zavolať metódu základnej triedy, keď metóda v základnej triede a metóda v odvodenej triede majú rovnaké názvy.
Nasledujúci program to demonštruje.
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ýkon:
# 3) Prístup ku konštruktoru nadtriedy
Keď dedíme jednu triedu od druhej, všimnite si, že konštruktory sa nededia.
Ak chceme pred vykonaním odvodeného konštruktora triedy vykonať akékoľvek pokyny od konštruktorov nadtriedy, môžeme ich zavolať aj pomocou kľúčového slova „super“.
Na volanie konštruktora nadtriedy používame volanie metódy.
super (zoznam parametrov ...)
Nasledujúca metóda demonštruje prístup k superkonštruktorom v Jave.
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ýkon:
Ako vidíme z vyššie uvedeného programu, z konštruktora odvodenej triedy sme nazvali konštruktor nadtriedy. Všimnite si, že podľa konvencie by vždy, keď chceme získať prístup ku konštruktoru nadtriedy, malo ísť o prvý príkaz v konštruktore odvodenej triedy.
Pretože základná trieda má parametrizovaný konštruktor, pri volaní konštruktora odovzdáme príslušný parameter aj super volania.
Ak neexistuje super explicitné volanie superkonštruktora, ako je uvedené vyššie, potom kompilátor vždy automaticky pridá implicitné volanie do super (). Upozorňujeme však, že to bude volanie predvoleného konštruktora nadtriedy.
často kladené otázky
Otázka 1) Čo je to dedičnosť v Jave?
Odpoveď: Proces, ktorým jedna trieda získava vlastnosti a správanie inej triedy, sa nazýva dedičnosť. V prostredí Java zdedí jedna trieda iná trieda pomocou kľúčového slova „extends“.
Dedenie podporuje opätovnú použiteľnosť kódu, pretože dedením môžeme získať a použiť už existujúce vlastnosti a správanie zdedenej triedy bez nutnosti písania duplicitného kódu.
Otázka 2) Prečo sa v jazyku Java používa dedičnosť?
Odpoveď: Dedenie sa používa hlavne na zlepšenie opätovnej použiteľnosti aplikácie. Pomocou dedenia môžeme v našej aplikácii použiť pripravené triedy. Ak máme funkčnosť pripravenú, nemusíme písať náš kód.
Druhé použitie dedičstva je v právnom predpise. Na implementáciu runtime polymorfizmu využívame dedičnosť.
Otázka č. 3) Aké sú výhody dedenia?
Odpoveď: Opätovná použiteľnosť je kľúčovou výhodou dedičstva. Zdieľanie kódu prostredníctvom dedenia má tiež za následok lepšiu čitateľnosť a lepšiu organizáciu kódu.
Runtime polymorfizmus môžeme dosiahnuť aj prepísaním metódy pomocou dedičnosti.
ako otvoriť xml súbor v prehliadači
Otázka č. 4) Aké sú vlastnosti dedičstva?
Odpoveď: Akákoľvek vlastnosť alebo vlastnosť získaná od staršej generácie sa deje dedením. Napríklad, znak ľahkého oka, ktorý sa vyskytuje v mnohých rodinách, je príkladom dedičstva.
Z hľadiska programovania poskytuje dedičnosť funkciu opätovného použitia a prepísania metódy.
Otázka 5) Je super () nevyhnutná?
Odpoveď: Nie. Pretože ak nebudeme volať super (), kompilátor to urobí implicitne za nás. Ale potom je implicitné vyvolanie super () predvoleným konštruktorom základnej triedy. Takže ak potrebujeme parametrizovaný konštruktor zo základnej triedy, mali by sme ho zavolať výslovne.
Záver
V tomto tutoriáli sme predstavili koncept dedičnosti v Jave. Dedenie je proces získavania vlastností a správania jednej triedy v inej triede. Diskutovali sme tu o základnej definícii a terminológii, ktorú používame v dedičstve.
Diskutovali sme tiež o vzťahoch Is-A a Has-A v Jave. Dedenie sa používa na implementáciu vzťahu Is-A.
Potom sme diskutovali o kľúčových slovách „extends“ a „super“ v Jave, ktoré sa používajú v súvislosti s dedičstvom. Extends sa používa na implementáciu dedičstva. Kľúčové slovo super sa používa na označenie konštruktora, metódy alebo premennej základnej triedy z odvodenej triedy.
=> Vyskúšajte Sprievodcu dokonalým školením Java tu.
Odporúčané čítanie
- Výukový program triedy skenerov Java s príkladmi
- Čo je Java Vector | Výukový program Java Vector Class s príkladmi
- Java Enum: Výukový program Java Enumeration s príkladmi
- Metóda Java String length () s príkladmi
- Výukový program Java Float s príkladmi programovania
- Dedenie v C ++
- Typy dedenia v C ++
- Koncepty OOP Pythonu (triedy, objekty a dedičnosť Pythonu)