Nasljedstvo u Java (s primjerom)

⚡ Pametni sažetak

Nasljedstvo u Java je mehanizam u kojem jedna klasa preuzima polja i metode druge klase putem ključne riječi extends. Promiče ponovnu upotrebu koda i modelira Is-A odnos između nadklase i njezinih podklasa.

  • 🧬 Definicija nasljeđivanja: Jedna klasa preuzima polja i metode druge koristeći extends.
  • 👨👩👧 Odnos Je-A: Modelira hijerarhiju roditeljske (super) klase i podklase (child) klase.
  • 🗂️ Pet vrsta: Jednostruko, višestruko, višerazinsko, hijerarhijsko i hibridno nasljeđivanje.
  • ???? Java Ograničenje: Java ne podržava višestruko ili hibridno nasljeđivanje putem klasa.
  • 🔑 Super ključna riječ: Pristupa varijablama, metodama i konstruktorima roditeljske klase iz podklase.
  • Korist: Ponovno koristi testirani kod i dodaje značajke putem novih klasa bez mijenjanja postojećih.

Nasljedstvo u Java

Što je nasljeđivanje?

Nasljeđivanje je mehanizam u kojem jedna klasa stječe svojstvo druge klase. Na primjer, dijete nasljeđuje osobine svojih roditelja. S nasljeđivanjem možemo ponovno koristiti polja i metode postojeće klase. Stoga, nasljeđivanje olakšava ponovnu upotrebu i važan je koncept OOP-a.

U čemu je nasljedstvo Java?

Java Nasljeđivanje je mehanizam u kojem jedna klasa stječe svojstvo druge klase. U Java, kada između dvije klase postoji odnos "Je-A", koristimo nasljeđivanje. Roditeljska klasa naziva se super klasa, a naslijeđena klasa se naziva podklasa. Ključna riječ extends koristi podklasa za nasljeđivanje značajki super klase. Nasljeđivanje je važno jer dovodi do ponovne upotrebe koda.

Java Sintaksa nasljeđivanja:

class subClass extends superClass
{
   //methods and fields
}

Vrste nasljeđivanja u Java

Ovdje su različite vrste nasljeđivanja u Java:

  1. Nasljeđivanje pojedinačno
  2. Višestruko nasljeđivanje
  3. Višerazinsko nasljeđivanje
  4. Hijerarhijsko nasljeđivanje
  5. Hibridno nasljeđivanje

1. Jedno nasljeđivanje:

Kod pojedinačnog nasljeđivanja jedna klasa proširuje drugu klasu (samo jedna klasa).

Jedno nasljeđe u Java
Nasljeđivanje pojedinačno

U gornjem dijagramu, klasa B proširuje samo klasu A. Klasa A je super klasa, a klasa B je podklasa.

2. Višestruko nasljeđivanje:

Višestruko nasljeđivanje jedno je od nasljeđivanja u Java vrste gdje jedna klasa proširuje više od jedne klase. Java ne podržava višestruko nasljeđivanje.

Višestruko nasljeđivanje u Java

Java Višestruko nasljeđivanje

Prema gornjem dijagramu, klasa C proširuje klasu A i klasu B.

3. Višerazinsko nasljeđivanje:

U nasljeđivanju na više razina, jedna klasa može naslijediti od izvedene klase. Dakle, izvedena klasa postaje osnovna klasa za novu klasu.

Višerazinsko nasljeđivanje u Java

Višerazinsko nasljeđivanje

Kao što je prikazano na dijagramu, klasa C je podklasa B, a B je podklasa klase A.

4. Hijerarhijsko nasljeđivanje:

Kod hijerarhijskog nasljeđivanja, jednu klasu nasljeđuju mnoge podklase.


Hijerarhijsko nasljeđivanje u Java

Hijerarhijsko nasljeđivanje

Kao u gornjem primjeru, klasa B, C i D nasljeđuju istu klasu A.

5. Hibridno nasljeđivanje:

Hibridno nasljeđivanje je jedan od tipova nasljeđivanja u Java što je kombinacija jednostrukog i višestrukog nasljeđivanja.


Hibridno nasljeđivanje

Hibridno nasljeđivanje

Kao u gornjem primjeru, svi javni i zaštićeni članovi klase A nasljeđuju se u klasu D, prvo putem klase B, a zatim putem klase C.

Bilješka: Java ne podržava hibridno/višestruko nasljeđivanje

Nasljedstvo u Java Primjer

Evo primjera nasljeđivanja u Java:


Primjer Java Nasljeđivanje

Java Primjer nasljeđivanja

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 ključna riječ

Ključna riječ super slična je ključnoj riječi "ovo". Ključna riječ super može se koristiti za pristup bilo kojem članu podataka ili metodama roditeljske klase. Ključna riječ Super može se koristiti na varijabla, metoda i razina konstruktora.

Sintaksa:

super.<method-name>();

Također provjerite: - ovu ključnu riječ u Java: Što je i kako se koristi s primjerom

Naučite nasljeđivanje u OOP-u s primjerom

Razmotrite istu bankovnu aplikaciju iz prethodni primjer.

Trebali bismo otvoriti dvije različite vrste računa, jedan za štednju i drugi za provjeru (poznat i kao tekući).

Nasljeđivanje u OOP-u

Usporedimo i proučimo kako možemo pristupiti kodiranju iz a strukturirana i objektno orijentirana programska perspektiva.

Strukturni pristup: U strukturiranom programiranju, kreirat ćemo dvije funkcije –

  1. Jedan za povlačenje
  2. A drugi za depozitnu akciju.

Budući da rad ovih funkcija ostaje isti na svim računima.

Nasljeđivanje u OOP-ovima

OOP pristup: Dok koristite OOP-ovi programski pristup. Stvorili bismo dvije klase.

  • Svaki ima implementaciju funkcija polaganja i isplate.
  • Ovo će biti suvišan dodatni posao.

Nasljeđivanje u OOP-ovima

Zahtjev za promjenu u softveru

Sada postoji promjena u specifikaciji zahtjeva za nešto što je tako uobičajeno u softverskoj industriji. Trebali biste dodati funkcionalni privilegirani bankovni račun s mogućnošću prekoračenja. Za pozadinu, prekoračenje je mogućnost u kojoj možete podići iznos veći od raspoloživog stanja na vašem računu.

Zahtjev za promjenu u softveru

Strukturni pristup: Koristeći funkcionalni pristup, moram modificirati svoju funkciju povlačenja, koja je već testirana i osnovana. I dodavanje metode kao što je dolje će se pobrinuti za nove zahtjeve.

Zahtjev za promjenu u softveru

OOP pristup: Koristeći OOP pristup, samo trebate napisati novu klasu s jedinstvenom implementacijom funkcije povlačenja. Nikada nismo dirali testirani dio koda.

Zahtjev za promjenu u softveru

Još jedan zahtjev za promjenu

Što ako se zahtjev dodatno promijeni? Želite dodati račun kreditne kartice s vlastitim jedinstvenim zahtjevom depozita.

Zahtjev za višestrukim promjenama u softveru

Strukturni pristup: Koristeći strukturni pristup, morate ponovno promijeniti testirani dio depozitnog koda.

Strukturni pristup zahtjevu za višestrukim promjenama u softveru

OOP pristup: No korištenjem objektno orijentiranog pristupa, samo ćete stvoriti novu klasu s njenom jedinstvenom implementacijom metode pologa (označeno crvenom bojom na slici ispod). Dakle, iako se strukturno programiranje u početku čini kao jednostavan pristup, OOP dugoročno pobjeđuje.

OOP-ov pristup zahtjevu za višestrukim promjenama

Prednosti nasljeđivanja u OOP-ovima

Ali netko može tvrditi da u svim klasama imate ponovljene dijelove koda.

Da biste to prevladali, kreirate nadređenu klasu, recimo "račun" i implementirate istu funkciju polaganja i isplate. I učinite podređene klase naslijeđenom klasom "računa". Tako da će imati pristup funkcijama povlačenja i polaganja u klasi računa. Funkcije se ne moraju implementirati zasebno. Ovo je Nasljeđivanje u Javi. .

Prednosti nasljeđivanja u OOP-ovima

Prednosti nasljeđivanja u OOP-ovima

Pitanja i odgovori

Java izbjegava višestruko nasljeđivanje klasa kako bi se spriječio "problem dijamanta", gdje kompajler ne može odlučiti koju naslijeđenu metodu koristiti. Umjesto toga, Java omogućuje klasi implementaciju više sučelja kako bi se sigurno postigla slična fleksibilnost.

Ključna riječ this odnosi se na trenutni objekt i njegove članove, dok se super odnosi na neposrednu roditeljsku klasu. Koristite super za pozivanje roditeljskih varijabli, metoda ili konstruktora iz podklase.

Nasljeđivanje modelira odnos "Je-A" gdje podklasa proširuje roditelja. Kompozicija modelira odnos "Ima-A" gdje klasa sadrži druge objekte. Kompozicija je često fleksibilnija i poželjnija je za labavo povezane dizajne.

Umjetna inteligencija može analizirati odgovornosti klasa, predlagati zajedničke bazne klase, preporučivati ​​sučelja umjesto dubokog nasljeđivanja i označavati duplicirani kod, helpping programeri grade čiste, višekratno upotrebljive hijerarhije koje slijede principe objektno orijentiranog dizajna.

Da. Statička analiza potpomognuta umjetnom inteligencijom može mjeriti dubinu nasljeđivanja, označiti krhke ili prekomjerno ugniježđene hijerarhije i predložiti refaktoriranje prema kompoziciji ili sučeljima kako bi se poboljšala održivost i smanjila čvrsta povezanost.

Sažmite ovu objavu uz: