Dědictví v Java (s příkladem)

Co je dědičnost?

Dědictví je mechanismus, ve kterém jedna třída získává vlastnost jiné třídy. Dítě například zdědí vlastnosti svých rodičů. Díky dědičnosti můžeme znovu použít pole a metody existující třídy. Dědičnost tedy usnadňuje opětovné použití a je důležitým konceptem OOP.

V čem je dědičnost Java?

Java Dědictví je mechanismus, ve kterém jedna třída získává vlastnost jiné třídy. V Java, když mezi dvěma třídami existuje vztah „Je-A“, použijeme dědičnost. Nadřazená třída se nazývá nadtřída a zděděná třída se nazývá podtřída. Klíčové slovo extends je používána podtřídou ke zdědění funkcí supertřídy. Dědičnost je důležitá, protože vede k opětovné použitelnosti kódu.

Java Syntaxe dědičnosti:

class subClass extends superClass  
{  
   //methods and fields  
} 

Typy dědičnosti v Java

Zde jsou různé typy dědičnosti Java:

  1. Single dědičnost
  2. Vícenásobné dědictví
  3. Víceúrovňová dědičnost
  4. Hierarchická dědičnost
  5. Hybridní dědičnost

1. Jediné dědictví:

V Single Inheritance jedna třída rozšiřuje další třídu (pouze jedna třída).

Jediné dědictví v Java
Single dědičnost

Ve výše uvedeném diagramu třída B rozšiřuje pouze třídu A. Třída A je supertřída a třída B je podtřída.

2. Vícenásobná dědičnost:

Vícenásobná dědičnost je jedním z dědičnosti v Java typy, kde jedna třída rozšiřuje více než jednu třídu. Java nepodporuje vícenásobnou dědičnost.

Vícenásobná dědičnost v Java
Java Vícenásobné dědictví

Jak je uvedeno výše, třída C rozšiřuje třídu A i třídu B.

3. Víceúrovňová dědičnost:

Ve víceúrovňové dědičnosti může jedna třída dědit z odvozené třídy. Odvozená třída se tedy stane základní třídou pro novou třídu.

Víceúrovňová dědičnost v Java
Víceúrovňová dědičnost

Jak je znázorněno na diagramu, třída C je podtřídou B a B je podtřídou třídy A.

4. Hierarchická dědičnost:

V hierarchické dědičnosti je jedna třída zděděna mnoha podtřídami.


Hierarchická dědičnost v Java
Hierarchická dědičnost

Jak je uvedeno výše, třídy B, C a D zdědí stejnou třídu A.

5. Hybridní dědičnost:

Hybridní dědičnost je jedním z typů dědičnosti Java což je kombinace jednoduché a vícenásobné dědičnosti.


Hybridní dědičnost
Hybridní dědičnost

Jak je uvedeno výše, všichni veřejní a chránění členové třídy A jsou zděděni do třídy D, nejprve prostřednictvím třídy B a podruhé prostřednictvím třídy C.

Poznámka: Java nepodporuje hybridní/vícenásobnou dědičnost

Dědictví v Java Příklad

Zde je příklad dědičnosti v Java:


Příklad Java Dědictví
Java Příklad dědictví

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 klíčové slovo

Klíčové slovo super je podobné klíčovému slovu „toto“. Klíčové slovo super lze použít pro přístup k libovolnému datovému členu nebo metodám nadřazené třídy. Super klíčové slovo lze použít na proměnlivý, metoda a úroveň konstruktoru.

Syntaxe:

super.<method-name>();

Zkontrolujte také: - toto klíčové slovo v Java: Co je a jak používat s příkladem

Naučte se dědičnost v OOP s příkladem

Zvažte stejnou bankovní aplikaci z předchozí příklad.

Máme otevřít dva různé typy účtů, jeden pro spoření a druhý pro kontrolu (také známý jako běžný).

Dědičnost v OOP

Pojďme porovnat a studovat, jak můžeme přistupovat ke kódování z a perspektiva strukturovaného a objektově orientovaného programování.

Strukturální přístup: Ve strukturovaném programování vytvoříme dvě funkce –

  1. Jeden ke stažení
  2. A druhý na akci vkladu.

Protože fungování těchto funkcí zůstává na všech účtech stejné.

Dědičnost v OOP's

OOP přístup: Při používání OOP programovací přístup. Vytvořili bychom dvě třídy.

  • Každý z nich má implementaci funkce vkladu a výběru.
  • To bude zbytečná práce navíc.

Dědičnost v OOP's

Požadavek na změnu v softwaru

Nyní došlo ke změně specifikace požadavků na něco, co je v softwarovém průmyslu tak běžné. Předpokládá se, že přidáte funkcionalitu zvýhodněného bankovního účtu s kontokorentním úvěrem. Na pozadí je kontokorent nástroj, kde můžete vybrat částku vyšší, než je dostupný zůstatek na vašem účtu.

Požadavek na změnu v softwaru

Strukturální přístup: Pomocí funkčního přístupu musím upravit svou funkci stažení, která je již otestována a základní. A přidat metodu jako níže se postará o nové požadavky.

Požadavek na změnu v softwaru

Přístup OOP: Pomocí přístupu OOP stačí napsat novou třídu s jedinečnou implementací funkce stažení. Testovaného kusu kódu jsme se nikdy nedotkli.

Požadavek na změnu v softwaru

Další žádost o změnu

Co když se požadavek dále změní? Chcete přidat účet kreditní karty s vlastním jedinečným požadavkem na vklady.

Požadavek na více změn v softwaru

Strukturální přístup: Pomocí strukturálního přístupu musíte znovu změnit testovaný kód vkladu.

Strukturální přístup k žádosti o více změn v softwaru

OOP přístup: Ale pomocí objektově orientovaného přístupu pouze vytvoříte novou třídu s unikátní implementací metody vkladu (na obrázku níže zvýrazněna červeně). Takže i když se strukturální programování zpočátku zdá jako snadný přístup, OOP vyhrává z dlouhodobého hlediska.

Přístup OOP k Multiple Change Request

Výhody dědičnosti v OOP

Někdo však může namítnout, že napříč všemi třídami máte opakované části kódu.

Chcete-li to překonat, vytvořte nadřazenou třídu, řekněte „účet“ a implementujte stejnou funkci vkladu a výběru. A udělejte z dětských tříd zděděnou třídu „účtu“. Takže budou mít přístup k funkcím výběru a vkladu ve třídě účtu. Funkce není nutné implementovat jednotlivě. Tohle je Dědičnost v Javě. .

Výhody dědičnosti v OOP

Výhody dědičnosti v OOP