logo

Mantojums Java valodā

Java, mantošana ir svarīgs OOP (objektorientētās programmēšanas) pīlārs. Tas ir Java mehānisms, ar kuru vienai klasei ir atļauts mantot citas klases līdzekļus (laukus un metodes). Java valodā mantošana nozīmē jaunu klašu izveidi, pamatojoties uz esošajām klasēm. Klase, kas manto no citas klases, var atkārtoti izmantot šīs klases metodes un laukus. Turklāt jūs varat pievienot jaunus laukus un metodes arī savai pašreizējai klasei.

Kāpēc mums ir nepieciešams Java mantojums?

  • Koda atkārtota izmantošana: Superklasē rakstītais kods ir kopīgs visām apakšklasēm. Bērnu klases var tieši izmantot vecākklases kodu.
  • Metodes ignorēšana: Metodes ignorēšana ir sasniedzams tikai ar mantojuma palīdzību. Tas ir viens no veidiem, kā Java panāk izpildes laika polimorfismu.
  • Abstrakcija: Abstrakta jēdziens, kurā mums nav jāsniedz visas detaļas, tiek sasniegts ar mantojuma palīdzību. Abstrakcija tikai parāda funkcionalitāti lietotājam.

Svarīgas Java mantojumā izmantotās terminoloģijas

  • Klase: Klase ir objektu kopums, kam ir kopīgas īpašības/uzvedība un kopīgas īpašības/atribūti. Klase nav reāla vienība. Tā ir tikai veidne vai projekts vai prototips, no kura tiek izveidoti objekti.
  • Superklase/vecāku klase: Klase, kuras pazīmes ir mantotas, ir pazīstama kā virsklase (vai bāzes klase vai vecākklase).
  • Apakšklase/bērnu klase: Klase, kas manto otru klasi, ir pazīstama kā apakšklase (vai atvasināta klase, paplašinātā klase vai pakārtotā klase). Apakšklase var pievienot savus laukus un metodes papildus virsklases laukiem un metodēm.
  • Atkārtota izmantošana: Mantojums atbalsta atkārtotas izmantošanas jēdzienu, t.i., ja mēs vēlamies izveidot jaunu klasi un jau ir klase, kas ietver daļu no mūsu vēlamā koda, mēs varam atvasināt savu jauno klasi no esošās klases. To darot, mēs atkārtoti izmantojam esošās klases laukus un metodes.

Kā izmantot mantojumu Java?

The paplašina atslēgvārdu tiek izmantots mantošanai Java. Atslēgvārda paplašinājumi izmantošana norāda, ka esat atvasināts no esošas klases. Citiem vārdiem sakot, paplašinājumi attiecas uz palielinātu funkcionalitāti.



javascript tuvākais

Sintakse :

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

Mantojuma Java piemērs

Piemērs: Tālāk sniegtajā mantojuma piemērā klase Bicycle ir bāzes klase, MountainBike klase ir atvasināta klase, kas paplašina velosipēdu klasi, un klase Test ir vadītāja klase programmas palaišanai.

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

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

Iepriekš minētajā programmā, kad tiek izveidots MountainBike klases objekts, visu superklases metožu un lauku kopijas iegūst atmiņu šajā objektā. Tāpēc, izmantojot apakšklases objektu, mēs varam piekļūt arī virsklases dalībniekiem.



Lūdzu, ņemiet vērā, ka mantojuma laikā tiek izveidots tikai apakšklases objekts, nevis virsklase. Lai uzzinātu vairāk, skatiet Mantotās klases Java objektu izveide .

2. piemērs: Tālāk esošajā mantojuma piemērā klase Darbinieks ir bāzes klase, klase Inženieris ir atvasināta klase, kas paplašina darbinieku klasi, un klase Tests ir draivera klase programmas palaišanai.

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

Izvade
Salary : 60000 Benefits : 10000>

Programmas ilustratīvs attēls:



e-bankas ierobežojumi
Mantojums Java valodā

Praksē mantošana un polimorfisms tiek izmantoti kopā Java, lai nodrošinātu ātru veiktspēju un koda lasāmību.

Java mantojuma veidi

Tālāk ir norādīti dažādi mantojuma veidi, kurus atbalsta Java.

  1. Vienotais mantojums
  2. Daudzlīmeņu mantošana
  3. Hierarhiskā mantošana
  4. Daudzkārtēja mantošana
  5. Hibrīda mantošana

1. Viena mantošana

Viena mantojuma gadījumā apakšklase tiek atvasināta tikai no vienas superklases. Tas pārmanto viena vecāka klases īpašības un uzvedību. Dažreiz to sauc arī par vienkāršu mantojumu. Zemāk redzamajā attēlā “A” ir vecāku klase un “B” ir bērnu klase. Klase “B” pārmanto visas klases “A” īpašības.

Vienreizējs mantojums

Vienreizējs mantojums

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

Izvade
Geeks for Geeks>

2. Daudzlīmeņu mantošana

Daudzlīmeņu mantojumā atvasinātā klase pārmantos bāzes klasi, un atvasinātā klase darbojas arī kā bāzes klase citām klasēm. Zemāk redzamajā attēlā klase A kalpo kā bāzes klase atvasinātajai klasei B, kas savukārt kalpo kā bāzes klase atvasinātajai klasei C. Programmā Java klase nevar tieši piekļūt vecvecāku biedri .

Daudzlīmeņu mantošana

Daudzlīmeņu mantošana

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

Izvade
Geeks for Geeks>

3. Hierarhiskā mantošana

Hierarhiskajā mantojumā viena klase kalpo kā virsklase (bāzes klase) vairāk nekā vienai apakšklasei. Zemāk redzamajā attēlā A klase kalpo kā bāzes klase atvasinātajām B, C un D klasēm.

Hierarhiskā mantošana 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();  } }>

Izvade
Class A Class B Class A Class C Class A Class D>

4. Vairāku mantojumu ( Izmantojot saskarnes)

In Vairāki mantojumi , vienai klasei var būt vairāk nekā viena virsklase, un tā var mantot funkcijas no visām vecākklasēm. Lūdzu, ņemiet vērā, ka Java to dara atbalsts vairāki mantojumi ar klasēm. Java mēs varam sasniegt vairākus mantojumus tikai caur Saskarnes . Zemāk redzamajā attēlā C klase ir atvasināta no saskarnēm A un B.

Daudzkārtēja mantošana

Daudzkārtēja mantošana

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

Izvade
Geeks for Geeks>

5. Hibrīda mantošana

Tas ir divu vai vairāku iepriekš minēto mantojuma veidu sajaukums. Tā kā Java neatbalsta vairākus mantojumus ar klasēm, hibrīda mantošana, kas ietver vairākas mantošanas, arī nav iespējama ar klasēm. Java mēs varam sasniegt hibrīda mantojumu tikai caur Saskarnes ja mēs vēlamies iesaistīt vairāku mantojumu, lai ieviestu hibrīda pārmantošanu.
Tomēr ir svarīgi atzīmēt, ka hibrīda mantojuma gadījumā ne vienmēr ir jāizmanto tikai daudzkārtēja mantošana. To var panākt, kombinējot daudzlīmeņu pārmantošanu un hierarhisko pārmantošanu ar klasēm, hierarhisko un vienoto pārmantošanu ar klasēm. Tāpēc patiešām ir iespējams ieviest hibrīda pārmantošanu, izmantojot tikai klases, nepaļaujoties uz vairākiem mantojuma veidiem.

Hibrīda mantošana

Hibrīda mantošana

java slēdža paziņojums

Java IS — attiecību veids

IS-A ir veids, kā pateikt: Šis objekts ir šī objekta tips. Apskatīsim, kā paplašinājuma atslēgvārds tiek izmantots, lai panāktu pārmantošanu.

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

Tagad, pamatojoties uz iepriekš minēto piemēru, objektorientētajos terminos ir patiess:

  • Saules sistēma ir Zemes klases virsklase.
  • SolarSystem ir Marsa klases superklase.
  • Zeme un Marss ir Saules sistēmas klases apakšklases.
  • Mēness ir gan Zemes, gan Saules sistēmas klašu apakšklase.
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);  } }>

Izvade
true true true>

Ko var darīt apakšklasē?

Apakšklasēs mēs varam mantot dalībniekus tādus, kādi tie ir, tos aizstāt, paslēpt vai papildināt ar jauniem dalībniekiem:

  • Mantotos laukus var izmantot tieši tāpat kā citus laukus.
  • Mēs varam deklarēt jaunus laukus apakšklasē, kas nav virsklasē.
  • Iedzimtās metodes var izmantot tieši tādas, kādas tās ir.
  • Varam uzrakstīt jaunu piemēram metode apakšklasē, kurai ir tāds pats paraksts kā virsklasē, tādējādi noteicošais tas (kā iepriekš minētajā piemērā, toString() metode ir ignorēta).
  • Varam uzrakstīt jaunu statisks metode apakšklasē, kurai ir tāds pats paraksts kā virsklasē, tādējādi slēpjas to.
  • Mēs varam deklarēt jaunas metodes apakšklasē, kuras nav virsklasē.
  • Mēs varam uzrakstīt apakšklases konstruktoru, kas izsauc virsklases konstruktoru, vai nu netieši, vai izmantojot atslēgvārdu super .

Mantojuma priekšrocības Java:

  1. Koda atkārtota izmantošana: mantošana ļauj atkārtoti izmantot kodu un samazina ierakstāmā koda daudzumu. Apakšklase var atkārtoti izmantot virsklases īpašības un metodes, samazinot koda dublēšanos.
  2. Abstrakcija: Mantojums ļauj izveidot abstraktas klases, kas definē kopīgu saskarni saistītu klašu grupai. Tas veicina abstrakciju un iekapsulēšanu, padarot kodu vieglāk uzturējamu un paplašināmu.
  3. Klases hierarhija: Mantojums ļauj izveidot klases hierarhiju, ko var izmantot, lai modelētu reālās pasaules objektus un to attiecības.
  4. Polimorfisms: Mantojums pieļauj polimorfismu, kas ir objekta spēja iegūt vairākas formas. Apakšklases var ignorēt virsklases metodes, kas ļauj tām dažādos veidos mainīt savu uzvedību.

Java mantojuma trūkumi:

  1. Sarežģītība: mantošana var padarīt kodu sarežģītāku un grūtāk saprotamu. Tas jo īpaši attiecas uz gadījumiem, kad mantojuma hierarhija ir dziļa vai tiek izmantoti vairāki mantojumi.
  2. Stingra saikne: mantošana rada ciešu saikni starp virsklasi un apakšklasi, apgrūtinot izmaiņu veikšanu virsklasē, neietekmējot apakšklasi.

Secinājums

Ļaujiet mums pārbaudīt dažus svarīgus punktus no raksta, kas minēti tālāk:

  • Noklusējuma superklase : Izņemot Objekts klasei, kurai nav virsklases, katrai klasei ir viena un tikai viena tiešā virsklase (vienreizēja mantošana). Ja nav citas skaidras virsklases, katra klase netieši ir objektu klases apakšklase.
  • Superklase var būt tikai viena: Virsklasei var būt jebkurš apakšklases. Bet apakšklasei var būt tikai viens superklase. Tas ir tāpēc, ka Java neatbalsta vairākus mantojumus ar klasēm. Lai gan ar saskarnēm, Java atbalsta vairākus mantojumus.
  • Mantotie konstruktori: Apakšklase manto visus dalībniekus (laukus, metodes un ligzdotās klases) no savas virsklases. Konstruktori nav dalībnieki, tāpēc apakšklases tos nemanto, bet no apakšklases var izsaukt virsklases konstruktoru.
  • Privātā dalībnieka mantojums: Apakšklase nemanto tās vecākklases privātos dalībniekus. Tomēr, ja virsklasei ir publiskas vai aizsargātas metodes (piemēram, ieguvēji un iestatītāji), lai piekļūtu tās privātajiem laukiem, tās var izmantot arī apakšklase.

Bieži uzdotie jautājumi par mantošanu

1. Kas ir mantojuma Java?

Mantojums ir OOP jēdziens, kurā viena klase manto no citas klases, kas var atkārtoti izmantot vecākklases metodes un laukus.

2. Kādi ir 4 Java mantojuma veidi?

Ir viens, vairāki, daudzlīmeņu, hierarhiskie un hibrīdie

3. Kāda ir paplašinājuma atslēgvārda izmantošana?

Atslēgvārds Extend tiek izmantots vienas klases pārmantošanai citā.

4. Kāds ir Java mantojuma piemērs?

Tālāk ir minēts reāls Java mantojuma piemērs:

Java atsauces veidi

Apsveriet transportlīdzekļu grupu. Jums ir jāizveido klases autobusiem, automašīnām un kravas automašīnām. Metodes fuelAmount(), capaces(), applyBrakes() būs vienādas visām trim klasēm.

Izmantotās atsauces:

  1. Ketija Sjerra un Bērts Beitss. Head First Java
  2. Java: Herberta Šilta rokasgrāmata iesācējiem
  3. Java: Herberta Šilta pilnīga atsauce
  4. Joshua Bloch efektīva Java
  5. Java: Džima Valdo labās daļas.