logo

Dedičnosť v Jave

Java, dedičnosť je dôležitým pilierom OOP (Object-Oriented Programming). Je to mechanizmus v Jave, pomocou ktorého môže jedna trieda zdediť vlastnosti (polia a metódy) inej triedy. V jazyku Java znamená dedičnosť vytváranie nových tried na základe existujúcich tried. Trieda, ktorá dedí z inej triedy, môže znova použiť metódy a polia tejto triedy. Okrem toho môžete do svojej aktuálnej triedy pridať aj nové polia a metódy.

Prečo potrebujeme dedičstvo Java?

  • Opätovná použiteľnosť kódu: Kód napísaný v nadtriede je spoločný pre všetky podtriedy. Podradené triedy môžu priamo používať kód rodičovskej triedy.
  • Prepísanie metódy: Prepísanie metódy je možné dosiahnuť iba prostredníctvom dedičstva. Je to jeden zo spôsobov, ako Java dosahuje Run Time Polymorphism.
  • Abstrakcia: Koncept abstraktu, kde nemusíme uvádzať všetky podrobnosti, sa dosahuje prostredníctvom dedenia. Abstrakcia iba zobrazuje funkčnosť používateľovi.

Dôležité terminológie používané v dedičstve Java

  • Trieda: Trieda je množina objektov, ktoré zdieľajú spoločné charakteristiky/správanie a spoločné vlastnosti/atribúty. Trieda nie je entita zo skutočného sveta. Je to len šablóna alebo plán alebo prototyp, z ktorého sú vytvorené objekty.
  • Super trieda/rodičovská trieda: Trieda, ktorej vlastnosti sa zdedia, je známa ako nadtrieda (alebo základná trieda alebo rodičovská trieda).
  • Podtrieda/trieda detí: Trieda, ktorá zdedí druhú triedu, je známa ako podtrieda (alebo odvodená trieda, rozšírená trieda alebo podradená trieda). Podtrieda môže pridať svoje vlastné polia a metódy okrem polí a metód nadtriedy.
  • Opätovná použiteľnosť: Dedičnosť podporuje koncept opätovnej použiteľnosti, t. j. keď chceme vytvoriť novú triedu a už existuje trieda, ktorá obsahuje časť kódu, ktorý chceme, môžeme odvodiť našu novú triedu z existujúcej triedy. Týmto spôsobom znova používame polia a metódy existujúcej triedy.

Ako používať dedičnosť v jazyku Java?

The rozširuje kľúčové slovo sa používa na dedenie v Jave. Použitie kľúčového slova extends naznačuje, že ste odvodený z existujúcej triedy. Inými slovami, extends odkazuje na zvýšenú funkčnosť.



filmy z Indie

Syntax:

class DerivedClass extends BaseClass  {   //methods and fields  }>

Príklad dedenia v jazyku Java

Príklad: V nižšie uvedenom príklade dedenia je trieda Bicycle základnou triedou, trieda MountainBike je odvodená trieda, ktorá rozširuje triedu Bicycle a trieda Test je trieda vodiča na spustenie programu.

Java
// Java program to illustrate the // concept of inheritance // base class class Bicycle {  // the Bicycle class has two fields  public int gear;  public int speed;  // the Bicycle class has one constructor  public Bicycle(int gear, int speed)  {  this.gear = gear;  this.speed = speed;  }  // the Bicycle class has three methods  public void applyBrake(int decrement)  {  speed -= decrement;  }  public void speedUp(int increment)  {  speed += increment;  }  // toString() method to print info of Bicycle  public String toString()  {  return ('No of gears are ' + gear + '
'  + 'speed of bicycle is ' + speed);  } } // derived class class MountainBike extends Bicycle {  // the MountainBike subclass adds one more field  public int seatHeight;  // the MountainBike subclass has one constructor  public MountainBike(int gear, int speed,  int startHeight)  {  // invoking base-class(Bicycle) constructor  super(gear, speed);  seatHeight = startHeight;  }  // the MountainBike subclass adds one more method  public void setHeight(int newValue)  {  seatHeight = newValue;  }  // overriding toString() method  // of Bicycle to print more info  @Override public String toString()  {  return (super.toString() + '
seat height is '  + seatHeight);  } } // driver class public class Test {  public static void main(String args[])  {  MountainBike mb = new MountainBike(3, 100, 25);  System.out.println(mb.toString());  } }>

Výkon
No of gears are 3 speed of bicycle is 100 seat height is 25>

Vo vyššie uvedenom programe, keď je vytvorený objekt triedy MountainBike, kópia všetkých metód a polí nadtriedy získa pamäť v tomto objekte. Preto pomocou objektu podtriedy môžeme pristupovať aj k členom nadtriedy.



Upozorňujeme, že počas dedenia sa vytvorí iba objekt podtriedy, nie nadtrieda. Ďalšie informácie nájdete v časti Vytvorenie objektu Java zdedenej triedy .

Príklad 2: V nižšie uvedenom príklade dedenia je trieda Zamestnanec základnou triedou, trieda Engineer je odvodená trieda, ktorá rozširuje triedu Zamestnanec a trieda Test je trieda ovládača na spustenie programu.

Java
// Java Program to illustrate Inheritance (concise) import java.io.*; // Base or Super Class class Employee {  int salary = 60000; } // Inherited or Sub Class class Engineer extends Employee {  int benefits = 10000; } // Driver Class class Gfg {  public static void main(String args[])  {  Engineer E1 = new Engineer();  System.out.println('Salary : ' + E1.salary  + '
Benefits : ' + E1.benefits);  } }>

Výkon
Salary : 60000 Benefits : 10000>

Ilustračný obrázok programu:



double v jave
Dedičnosť v Jave

V praxi sa dedenie, a polymorfizmus sa v Jave používajú spoločne na dosiahnutie rýchleho výkonu a čitateľnosti kódu.

Typy dedičnosti Java

Nižšie sú uvedené rôzne typy dedenia, ktoré podporuje Java.

  1. Jediné dedičstvo
  2. Viacúrovňová dedičnosť
  3. Hierarchické dedičstvo
  4. Viacnásobné dedičstvo
  5. Hybridné dedičstvo

1. Jediné dedičstvo

Pri jednoduchej dedičnosti je podtrieda odvodená iba od jednej nadtriedy. Dedí vlastnosti a správanie jednorodičovskej triedy. Niekedy sa to nazýva aj jednoduché dedičstvo. Na obrázku nižšie je „A“ nadradená trieda a „B“ je podradená trieda. Trieda „B“ zdedí všetky vlastnosti triedy „A“.

Jediné dedičstvo

Jediné dedičstvo

Java
// Java program to illustrate the // concept of single inheritance import java.io.*; import java.lang.*; import java.util.*; // Parent class class One {  public void print_geek()  {  System.out.println('Geeks');  } } class Two extends One {  public void print_for() { System.out.println('for'); } } // Driver class public class Main {  // Main function  public static void main(String[] args)  {  Two g = new Two();  g.print_geek();  g.print_for();  g.print_geek();  } }>

Výkon
Geeks for Geeks>

2. Viacúrovňová dedičnosť

Vo viacúrovňovom dedičstve bude odvodená trieda dediť základnú triedu a rovnako ako odvodená trieda funguje aj ako základná trieda pre iné triedy. Na obrázku nižšie trieda A slúži ako základná trieda pre odvodenú triedu B, ktorá zase slúži ako základná trieda pre odvodenú triedu C. V jazyku Java trieda nemôže priamo pristupovať k členovia starých rodičov .

Viacúrovňová dedičnosť

Viacúrovňová dedičnosť

Java
// Importing required libraries import java.io.*; import java.lang.*; import java.util.*; // Parent class One class One {  // Method to print 'Geeks'  public void print_geek() {  System.out.println('Geeks');  } } // Child class Two inherits from class One class Two extends One {  // Method to print 'for'  public void print_for() {  System.out.println('for');  } } // Child class Three inherits from class Two class Three extends Two {  // Method to print 'Geeks'  public void print_lastgeek() {  System.out.println('Geeks');  } } // Driver class public class Main {  public static void main(String[] args) {  // Creating an object of class Three  Three g = new Three();    // Calling method from class One  g.print_geek();    // Calling method from class Two  g.print_for();    // Calling method from class Three  g.print_lastgeek();  } }>

Výkon
Geeks for Geeks>

3. Hierarchická dedičnosť

V hierarchickej dedičnosti jedna trieda slúži ako nadtrieda (základná trieda) pre viac ako jednu podtriedu. Na obrázku nižšie trieda A slúži ako základná trieda pre odvodené triedy B, C a D.

Hierarchická-dedičnosť-v-Java

Java
// Java program to illustrate the // concept of Hierarchical inheritance class A {  public void print_A() { System.out.println('Class A'); } } class B extends A {  public void print_B() { System.out.println('Class B'); } } class C extends A {  public void print_C() { System.out.println('Class C'); } } class D extends A {  public void print_D() { System.out.println('Class D'); } } // Driver Class public class Test {  public static void main(String[] args)  {  B obj_B = new B();  obj_B.print_A();  obj_B.print_B();  C obj_C = new C();  obj_C.print_A();  obj_C.print_C();  D obj_D = new D();  obj_D.print_A();  obj_D.print_D();  } }>

Výkon
Class A Class B Class A Class C Class A Class D>

4. Viacnásobné dedičstvo ( Cez rozhrania)

In Viacnásobné dedičstvo , jedna trieda môže mať viac ako jednu nadtriedu a dediť funkcie od všetkých rodičovských tried. Upozorňujeme, že Java áno nie podpora viacnásobné dedičstvo s triedami. V Jave môžeme dosiahnuť viacnásobné dedičstvo iba prostredníctvom Rozhrania . Na obrázku nižšie je trieda C odvodená od rozhraní A a B.

Viacnásobné dedičstvo

Viacnásobné dedičstvo

Java
// Java program to illustrate the // concept of Multiple inheritance import java.io.*; import java.lang.*; import java.util.*; interface One {  public void print_geek(); } interface Two {  public void print_for(); } interface Three extends One, Two {  public void print_geek(); } class Child implements Three {  @Override public void print_geek()  {  System.out.println('Geeks');  }  public void print_for() { System.out.println('for'); } } // Drived class public class Main {  public static void main(String[] args)  {  Child c = new Child();  c.print_geek();  c.print_for();  c.print_geek();  } }>

Výkon
Geeks for Geeks>

5. Hybridná dedičnosť

Ide o kombináciu dvoch alebo viacerých vyššie uvedených typov dedičstva. Keďže Java nepodporuje viacnásobné dedičstvo s triedami, hybridné dedičstvo zahŕňajúce viacnásobné dedičstvo tiež nie je možné s triedami. V Jave môžeme dosiahnuť hybridné dedičstvo iba prostredníctvom Rozhrania ak chceme zapojiť viacnásobnú dedičnosť na implementáciu hybridnej dedičnosti.
Je však dôležité poznamenať, že hybridná dedičnosť si nevyhnutne nevyžaduje výlučne použitie viacnásobnej dedičnosti. Dá sa to dosiahnuť kombináciou viacúrovňovej dedičnosti a hierarchickej dedičnosti s triedami, hierarchickej a jedinej dedičnosti s triedami. Preto je skutočne možné implementovať hybridnú dedičnosť pomocou samotných tried bez spoliehania sa na typ viacnásobnej dedičnosti.

Hybridné dedičstvo

Hybridné dedičstvo

Java JE typ vzťahu

IS-A je spôsob, ako povedať: Tento objekt je typom tohto objektu. Pozrime sa, ako sa kľúčové slovo extends používa na dosiahnutie dedičnosti.

porovnateľný reťazec
Java
public class SolarSystem { } public class Earth extends SolarSystem { } public class Mars extends SolarSystem { } public class Moon extends Earth { }>

Teraz, na základe vyššie uvedeného príkladu, v objektovo orientovaných podmienkach, platí nasledovné: -

  • Slnečný systém je nadtriedou triedy Zeme.
  • SolarSystem je supertrieda triedy Mars.
  • Zem a Mars sú podtriedy triedy slnečnej sústavy.
  • Mesiac je podtriedou tried Zeme aj Slnečnej sústavy.
Java
class SolarSystem { } class Earth extends SolarSystem { } class Mars extends SolarSystem { } public class Moon extends Earth {  public static void main(String args[])  {  SolarSystem s = new SolarSystem();  Earth e = new Earth();  Mars m = new Mars();  System.out.println(s instanceof SolarSystem);  System.out.println(e instanceof Earth);  System.out.println(m instanceof SolarSystem);  } }>

Výkon
true true true>

Čo sa dá urobiť v podtriede?

V podtriedach môžeme dediť členov tak, ako sú, nahradiť ich, skryť alebo doplniť novými členmi:

  • Zdedené polia možno použiť priamo, rovnako ako akékoľvek iné polia.
  • V podtriede môžeme deklarovať nové polia, ktoré nie sú v nadtriede.
  • Zdedené metódy možno použiť priamo tak, ako sú.
  • Môžeme napísať nový príklad metóda v podtriede, ktorá má rovnaký podpis ako v nadtriede, teda prvoradé to (ako v príklade vyššie, natiahnuť() metóda je prepísaná).
  • Môžeme napísať nový statické metóda v podtriede, ktorá má rovnaký podpis ako v nadtriede, teda skrývanie to.
  • V podtriede môžeme deklarovať nové metódy, ktoré nie sú v nadtriede.
  • Môžeme napísať konštruktor podtriedy, ktorý vyvolá konštruktor nadtriedy, buď implicitne alebo pomocou kľúčového slova Super .

Výhody dedičnosti v Jave:

  1. Opätovná použiteľnosť kódu: Dedičnosť umožňuje opätovné použitie kódu a znižuje množstvo kódu, ktorý je potrebné napísať. Podtrieda môže opätovne použiť vlastnosti a metódy nadtriedy, čím sa zníži duplicita kódu.
  2. Abstrakcia: Dedičnosť umožňuje vytváranie abstraktných tried, ktoré definujú spoločné rozhranie pre skupinu súvisiacich tried. To podporuje abstrakciu a zapuzdrenie, čím sa kód ľahšie udržiava a rozširuje.
  3. Hierarchia tried: Dedičnosť umožňuje vytvorenie hierarchie tried, ktorú možno použiť na modelovanie objektov reálneho sveta a ich vzťahov.
  4. Polymorfizmus: Dedičnosť umožňuje polymorfizmus, čo je schopnosť objektu nadobudnúť viacero podôb. Podtriedy môžu prepísať metódy nadtriedy, čo im umožňuje meniť svoje správanie rôznymi spôsobmi.

Nevýhody dedičnosti v Jave:

  1. Zložitosť: Dedičnosť môže urobiť kód zložitejším a ťažšie zrozumiteľným. Platí to najmä vtedy, ak je hierarchia dedenia hlboká alebo ak sa používa viacero dedičstiev.
  2. Tesné spojenie: Dedičnosť vytvára tesné spojenie medzi nadtriedou a podtriedou, čo sťažuje vykonanie zmien v nadtriede bez ovplyvnenia podtriedy.

Záver

Pozrime sa na niektoré dôležité body z článku, ktoré sú uvedené nižšie:

tostring java metóda
  • Predvolená nadtrieda : Okrem Objekt trieda, ktorá nemá žiadnu nadtriedu, každá trieda má jednu a iba jednu priamu nadtriedu (jednorazové dedičstvo). Ak neexistuje žiadna iná explicitná nadtrieda, každá trieda je implicitne podtriedou triedy Object.
  • Supertrieda môže byť iba jedna: Nadtrieda môže mať ľubovoľný počet podtried. Ale podtrieda môže mať iba jeden supertrieda. Je to preto, že Java nepodporuje viacnásobné dedičstvo s triedami. Hoci s rozhraniami, Java podporuje viacnásobnú dedičnosť.
  • Dedenie konštruktérov: Podtrieda zdedí všetky členy (polia, metódy a vnorené triedy) zo svojej nadtriedy. Konštruktory nie sú členmi, takže ich nededia podtriedy, ale konštruktor nadtriedy je možné vyvolať z podtriedy.
  • Súkromné ​​​​členské dedičstvo: Podtrieda nededí súkromných členov svojej nadradenej triedy. Ak má však nadtrieda verejné alebo chránené metódy (ako getry a nastavovače) na prístup k svojim súkromným poliam, môže ich použiť aj podtrieda.

Časté otázky v dedičstve

1. Čo je dedičnosť Java?

Dedičnosť je koncept OOP, kde jedna trieda dedí z inej triedy, ktorá môže opätovne použiť metódy a polia rodičovskej triedy.

2. Aké sú 4 typy dedenia v Jave?

Existujú jednoduché, viacnásobné, viacúrovňové, hierarchické a hybridné

3. Aké je použitie kľúčového slova extend?

Kľúčové slovo Extend sa používa na dedenie jednej triedy do druhej.

4. Aký je príklad dedenia v Jave?

Reálny príklad dedičnosti v jazyku Java je uvedený nižšie:

Zvážte skupinu vozidiel. Musíte vytvoriť triedy pre autobusy, autá a nákladné autá. Metódy fuelAmount(), capacity(), applyBrakes() budú rovnaké pre všetky tri triedy.

Použité referencie:

  1. Head First Java od Kathy Sierra a Berta Batesa
  2. Java: Príručka pre začiatočníkov od Herberta Schildta
  3. Java: Kompletná referencia od Herberta Schildta
  4. Efektívna Java od Joshuu Blocha
  5. Java: The Good Parts od Jima Walda.