logo

Dedovanje v Javi

Java, dedovanje je pomemben steber OOP (objektno usmerjenega programiranja). To je mehanizem v Javi, s katerim lahko en razred podeduje funkcije (polja in metode) drugega razreda. V Javi dedovanje pomeni ustvarjanje novih razredov na podlagi obstoječih. Razred, ki deduje od drugega razreda, lahko znova uporabi metode in polja tega razreda. Poleg tega lahko svojemu trenutnemu razredu dodate nova polja in metode.

Zakaj potrebujemo dedovanje Jave?

  • Ponovna uporabnost kode: Koda, zapisana v nadrazredu, je skupna vsem podrazredom. Podrejeni razredi lahko neposredno uporabljajo kodo nadrejenega razreda.
  • Preglasitev metode: Preglasitev metode je mogoče doseči samo z dedovanjem. To je eden od načinov, s katerim Java doseže polimorfizem izvajalnega časa.
  • Abstrakcija: Koncept abstraktnega, kjer nam ni treba zagotoviti vseh podrobnosti, je dosežen z dedovanjem. Abstrakcija uporabniku prikaže le funkcionalnost.

Pomembne terminologije, ki se uporabljajo pri dedovanju Jave

  • Razred: Razred je niz predmetov, ki imajo skupne značilnosti/vedenje in skupne lastnosti/atribute. Razred ni entiteta iz resničnega sveta. Je samo predloga ali načrt ali prototip, iz katerega so ustvarjeni predmeti.
  • Super razred/starševski razred: Razred, katerega značilnosti so podedovane, je znan kot nadrazred (ali osnovni razred ali nadrejeni razred).
  • Podrazred/podrejeni razred: Razred, ki podeduje drugi razred, je znan kot podrazred (ali izpeljani razred, razširjeni razred ali podrejeni razred). Podrazred lahko doda svoja polja in metode poleg polj in metod nadrazreda.
  • Ponovna uporabnost: Dedovanje podpira koncept ponovne uporabnosti, tj. ko želimo ustvariti nov razred in že obstaja razred, ki vključuje nekaj kode, ki jo želimo, lahko naš novi razred izpeljemo iz obstoječega razreda. S tem ponovno uporabimo polja in metode obstoječega razreda.

Kako uporabljati dedovanje v Javi?

The razširi ključno besedo se uporablja za dedovanje v Javi. Uporaba ključne besede extends pomeni, da izhajate iz obstoječega razreda. Z drugimi besedami, razširitev se nanaša na povečano funkcionalnost.



execlp

Sintaksa:

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

Primer dedovanja v Javi

primer: V spodnjem primeru dedovanja je razred Bicycle osnovni razred, razred MountainBike je izpeljan razred, ki razširja razred Bicycle, razred Test pa je razred voznika za izvajanje programa.

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());  } }>

Izhod
No of gears are 3 speed of bicycle is 100 seat height is 25>

V zgornjem programu, ko je ustvarjen objekt razreda MountainBike, kopija vseh metod in polj nadrazreda pridobi pomnilnik v tem objektu. Zato lahko z uporabo objekta podrazreda dostopamo tudi do članov nadrazreda.



Upoštevajte, da se med dedovanjem ustvari samo objekt podrazreda, ne nadrazreda. Za več glejte Ustvarjanje predmeta Java podedovanega razreda .

Primer 2: V spodnjem primeru dedovanja je razred Employee osnovni razred, razred Engineer je izpeljan razred, ki razširja razred Employee, razred Test pa je razred gonilnika za izvajanje programa.

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);  } }>

Izhod
Salary : 60000 Benefits : 10000>

Ilustrativna slika programa:



q1 q2 q3 q4
Dedovanje v Javi

V praksi dedovanje in polimorfizem se skupaj uporabljajo v Javi, da dosežejo hitro delovanje in berljivost kode.

Vrste dedovanja Java

Spodaj so različne vrste dedovanja, ki jih podpira Java.

  1. Enotno dedovanje
  2. Večnivojsko dedovanje
  3. Hierarhično dedovanje
  4. Večkratno dedovanje
  5. Hibridno dedovanje

1. Enojno dedovanje

Pri enojnem dedovanju je podrazred izpeljan samo iz enega nadrazreda. Podeduje lastnosti in obnašanje enostarševskega razreda. Včasih je znano tudi kot preprosto dedovanje. Na spodnji sliki je 'A' nadrejeni razred, 'B' pa podrejeni razred. Razred 'B' podeduje vse lastnosti razreda 'A'.

Enkratno dedovanje

Enkratno dedovanje

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();  } }>

Izhod
Geeks for Geeks>

2. Večnivojsko dedovanje

Pri večnivojskem dedovanju bo izpeljani razred podedoval osnovni razred in poleg izpeljanega razreda deluje tudi kot osnovni razred za druge razrede. Na spodnji sliki razred A služi kot osnovni razred za izpeljani razred B, ta pa kot osnovni razred za izpeljani razred C. V Javi razred ne more neposredno dostopati do člani starih staršev .

Večnivojsko dedovanje

Večnivojsko dedovanje

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();  } }>

Izhod
Geeks for Geeks>

3. Hierarhično dedovanje

Pri hierarhičnem dedovanju en razred služi kot nadrazred (osnovni razred) za več kot en podrazred. Na spodnji sliki razred A služi kot osnovni razred za izpeljane razrede B, C in D.

Hierarhično-dedovanje-v-Javi

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();  } }>

Izhod
Class A Class B Class A Class C Class A Class D>

4. Večkratno dedovanje ( prek vmesnikov)

noter Večkratno dedovanje , ima lahko en razred več kot en nadrazred in podeduje lastnosti vseh nadrejenih razredov. Upoštevajte, da Java to počne ne podporo večkratno dedovanje z razredi. V Javi lahko dosežemo večkratno dedovanje samo prek Vmesniki . Na spodnji sliki je razred C izpeljan iz vmesnikov A in B.

Večkratno dedovanje

Večkratno dedovanje

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();  } }>

Izhod
Geeks for Geeks>

5. Hibridno dedovanje

Gre za mešanico dveh ali več zgoraj navedenih vrst dedovanja. Ker Java ne podpira večkratnega dedovanja z razredi, tudi hibridno dedovanje, ki vključuje večkratno dedovanje, ni mogoče z razredi. V Javi lahko dosežemo hibridno dedovanje samo prek Vmesniki če želimo vključiti večkratno dedovanje za implementacijo hibridnega dedovanja.
Vendar je pomembno upoštevati, da hibridno dedovanje ne zahteva nujno izključno uporabe večkratnega dedovanja. To je mogoče doseči s kombinacijo večnivojskega dedovanja in hierarhičnega dedovanja z razredi, hierarhičnega in enojnega dedovanja z razredi. Zato je dejansko mogoče implementirati hibridno dedovanje samo z uporabo razredov, ne da bi se zanašali na večkratni tip dedovanja.

velikost besedila lateks
Hibridno dedovanje

Hibridno dedovanje

Java JE vrsta odnosa

IS-A je način povedati: ta predmet je vrsta tega predmeta. Poglejmo, kako se ključna beseda extends uporablja za doseganje dedovanja.

Java
public class SolarSystem { } public class Earth extends SolarSystem { } public class Mars extends SolarSystem { } public class Moon extends Earth { }>

Zdaj, na podlagi zgornjega primera, v objektno usmerjenem smislu velja naslednje:-

  • SolarSystem je nadrazred razreda Zemlje.
  • SolarSystem je nadrazred razreda Mars.
  • Zemlja in Mars sta podrazreda razreda SolarSystem.
  • Luna je podrazred obeh razredov Zemlja in SolarSystem.
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);  } }>

Izhod
true true true>

Kaj je mogoče narediti v podrazredu?

V podrazredih lahko podedujemo člane takšne, kot so, jih zamenjamo, skrijemo ali dopolnimo z novimi člani:

  • Podedovana polja je mogoče uporabiti neposredno, tako kot vsa druga polja.
  • V podrazredu lahko deklariramo nova polja, ki niso v nadrazredu.
  • Podedovane metode je mogoče uporabiti neposredno takšne, kot so.
  • Lahko napišemo novo primerek metoda v podrazredu, ki ima enak podpis kot tista v nadrazredu, torej prevladujoče to (kot v zgornjem primeru, toString() metoda je preglasena).
  • Lahko napišemo novo statična metoda v podrazredu, ki ima enak podpis kot tista v nadrazredu, torej skrivanje to.
  • V podrazredu lahko deklariramo nove metode, ki niso v nadrazredu.
  • Napišemo lahko konstruktor podrazreda, ki prikliče konstruktor nadrazreda, bodisi implicitno bodisi z uporabo ključne besede super .

Prednosti dedovanja v Javi:

  1. Ponovna uporaba kode: Dedovanje omogoča ponovno uporabo kode in zmanjša količino kode, ki jo je treba napisati. Podrazred lahko ponovno uporabi lastnosti in metode nadrazreda, kar zmanjša podvajanje kode.
  2. Abstrakcija: Dedovanje omogoča ustvarjanje abstraktnih razredov, ki definirajo skupni vmesnik za skupino povezanih razredov. To spodbuja abstrakcijo in enkapsulacijo, kar olajša vzdrževanje in razširitev kode.
  3. Hierarhija razredov: Dedovanje omogoča ustvarjanje hierarhije razredov, ki se lahko uporablja za modeliranje predmetov iz resničnega sveta in njihovih odnosov.
  4. Polimorfizem: Dedovanje omogoča polimorfizem, ki je sposobnost predmeta, da prevzame več oblik. Podrazredi lahko preglasijo metode nadrazreda, kar jim omogoča spreminjanje njihovega vedenja na različne načine.

Slabosti dedovanja v Javi:

  1. Kompleksnost: Zaradi dedovanja je lahko koda bolj zapletena in težje razumljiva. To še posebej velja, če je hierarhija dedovanja globoka ali če se uporablja več dedovanja.
  2. Tesna povezava: Dedovanje ustvari tesno povezavo med nadrazredom in podrazredom, zaradi česar je težko narediti spremembe v nadrazredu, ne da bi to vplivalo na podrazred.

Zaključek

Oglejmo si nekaj pomembnih točk iz članka, navedenih spodaj:

  • Privzeti nadrazred : Razen Objekt razred, ki nima nadrazreda, ima vsak razred enega in samo enega neposrednega nadrazreda (enojno dedovanje). V odsotnosti katerega koli drugega eksplicitnega nadrazreda je vsak razred implicitno podrazred razreda Object.
  • Superrazred je lahko samo eden: Nadrazred ima lahko poljubno število podrazredov. Toda podrazred ima lahko samo eno nadrazred. To je zato, ker Java ne podpira večkratnega dedovanja z razredi. Čeprav z vmesniki, Java podpira več dedovanja.
  • Dedovanje konstruktorjev: Podrazred podeduje vse člane (polja, metode in ugnezdene razrede) svojega nadrazreda. Konstruktorji niso člani, zato jih podrazredi ne podedujejo, vendar je konstruktorja nadrazreda mogoče priklicati iz podrazreda.
  • Zasebno dedovanje članov: Podrazred ne podeduje zasebnih članov svojega nadrejenega razreda. Če pa ima nadrazred javne ali zaščitene metode (kot so pridobivalniki in nastavljalci) za dostop do svojih zasebnih polj, jih lahko uporablja tudi podrazred.

Pogosta vprašanja o dedovanju

1. Kaj je Inheritance Java?

Dedovanje je koncept OOP-jev, kjer en razred podeduje od drugega razreda, ki lahko ponovno uporabi metode in polja nadrejenega razreda.

kaj so selektorji v css

2. Katere so 4 vrste dedovanja v Javi?

Obstajajo enojni, večnivojski, večnivojski, hierarhični in hibridni

3. Kakšna je uporaba ključne besede extend?

Ključna beseda Extend se uporablja za dedovanje enega razreda v drugega.

4. Kaj je primer dedovanja v Javi?

Spodaj je omenjen dejanski primer dedovanja v Javi:

Razmislite o skupini vozil. Ustvariti morate razrede za avtobus, avto in tovornjak. Metode fuelAmount(), capacity(), applyBrakes() bodo enake za vse tri razrede.

Uporabljene reference:

  1. Head First Java Kathy Sierra in Bert Bates
  2. Java: Vodnik za začetnike Herberta Schildta
  3. Java: The Complete Reference Herbert Schildt
  4. Učinkovita Java Joshue Blocha
  5. Java: Dobri deli Jima Walda.