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

⚡ Chytré shrnutí

Dědictví v Java je mechanismus, ve kterém jedna třída získává pole a metody jiné třídy pomocí klíčového slova extends. Podporuje opětovnou použitelnost kódu a modeluje vztah Is-A mezi nadtřídou a jejími podtřídami.

  • 🧬 Definice dědičnosti: Jedna třída získává pole a metody jiné třídy pomocí extends.
  • 👨‍👩‍👧 Vztah je-A: Modeluje hierarchii nadřazené (super) třídy a podřízené (pod) třídy.
  • 🗂️ Pět typů: Jednoduchá, vícenásobná, víceúrovňová, hierarchická a hybridní dědičnost.
  • 🚫 Java Omezení: Java nepodporuje vícenásobnou nebo hybridní dědičnost prostřednictvím tříd.
  • 🔑 Super klíčové slovo: Přistupuje k proměnným, metodám a konstruktorům nadřazené třídy z podtřídy.
  • (Tj. Výhoda: Znovu používá otestovaný kód a přidává funkce prostřednictvím nových tříd bez úprav stávajících.

Dědictví v Java

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

Přístup OOP: 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

Přístup OOP: Ale použitím objektově orientovaného přístupu pouze vytvoříte novou třídu s její 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 jeví jako snadný přístup, OOP z dlouhodobého hlediska vítězí.

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

Nejčastější dotazy

Java vyhýbá se vícenásobnému dědění tříd, aby se zabránilo „problému diamantů“, kdy se kompilátor nemůže rozhodnout, kterou zděděnou metodu použít. Místo toho, Java umožňuje třídě implementovat více rozhraní pro bezpečné dosažení podobné flexibility.

Klíčové slovo this odkazuje na aktuální objekt a jeho členy, zatímco super odkazuje na bezprostřední nadřazenou třídu. Klíčové slovo super se používá k volání proměnných, metod nebo konstruktoru nadřazené třídy z podtřídy.

Dědičnost modeluje vztah „Je-A“, kde podtřída rozšiřuje rodičovskou třídu. Kompozice modeluje vztah „Má-A“, kde třída obsahuje další objekty. Kompozice je často flexibilnější a je preferována pro volně propojené návrhy.

Umělá inteligence dokáže analyzovat odpovědnosti tříd, navrhovat sdílené základní třídy, doporučovat rozhraní namísto hluboké dědičnosti a označovat duplicitní kód, helpping Vývojáři vytvářejí čisté, opakovaně použitelné hierarchie, které dodržují principy objektově orientovaného návrhu.

Ano. Statická analýza s pomocí umělé inteligence dokáže měřit hloubku dědičnosti, označit křehké nebo nadměrně vnořené hierarchie a navrhnout refaktoring směrem ke kompozici nebo rozhraním, aby se zlepšila udržovatelnost a snížila těsná vazba.

Shrňte tento příspěvek takto: