Arv er den mest kraftfulde funktion ved objektorienteret programmering. Det giver os mulighed for at arve egenskaberne af en klasse til en anden klasse. I dette afsnit vil vi diskutere typer af arv i Java dybdegående med eksempler fra det virkelige liv. Vi vil også skabe Java-programmer til at implementere konceptet med forskellige typer af arv.
Arv
Arv er en mekanisme til at køre en ny klasse fra en eksisterende klasse. Den eksisterende (gamle) klasse er kendt som basisklasse eller super klasse eller forældreklasse . Den nye klasse er kendt som en afledt klasse eller underklasse eller børneklasse . Det giver os mulighed for at bruge egenskaberne og adfærden for en klasse (forælder) i en anden klasse (barn).
En klasse, hvis egenskaber er nedarvet, er kendt som forældreklasse og en klasse, der arver egenskaberne for den overordnede klasse, er kendt som børneklasse . Således etablerer det et forhold mellem forældre og børneklasse, der er kendt som forældre-barn eller Er en forhold.
Antag, at der er to klasser navngivet Far og Barn og vi ønsker at arve Fader-klassens egenskaber i Child-klassen. Det kan vi opnå ved at bruge strækker sig søgeord.
//inherits the properties of the Father class class Child extends Father { //functionality }
Hvornår skal vi bruge arv?
Arv giver genanvendelighed kode, især når der er en stor skala af kode, der skal genbruges. Det etablerer også forholdet mellem forskellige klasser, der er kendt som en Er en forhold. Vi kan også bruge det, hvis vi vil opnå metode tilsidesætte .
Punkter at huske
- Constructor kan ikke nedarves i Java.
- Private medlemmer bliver ikke arvet i Java.
- Cyklisk arv er ikke tilladt i Java.
- Tildel overordnet reference til underordnede objekter.
- Konstruktører bliver udført på grund af super() til stede i konstruktøren.
Arvetyper
Java understøtter følgende fire typer af arv:
- Enkelt Arv
- Arv på flere niveauer
- Hierarkisk arv
- Hybrid arv
Bemærk: Multipel nedarvning er ikke understøttet i Java.
Lad os diskutere hver med et passende eksempel.
Enkelt Arv
Ved enkeltarv er en underklasse kun afledt af én superklasse. Det arver egenskaberne og adfærden fra en enkeltforælderklasse. Nogle gange er det også kendt som simpel arv .
I ovenstående figur er Medarbejder en forældreklasse og Executive er en børneklasse. Executive-klassen arver alle egenskaberne i Employee-klassen.
Lad os implementere den enkelte arvemekanisme i et Java-program.
Executive.java
tyre vs okse
class Employee { float salary=34534*12; } public class Executive extends Employee { float bonus=3000*6; public static void main(String args[]) { Executive obj=new Executive(); System.out.println('Total salary credited: '+obj.salary); System.out.println('Bonus of six months: '+obj.bonus); } }
Produktion:
Total salary credited: 414408.0 Bonus of six months: 18000.0
Arv på flere niveauer
I arv på flere niveauer , en klasse er afledt af en klasse, som også er afledt fra en anden klasse kaldes multi-level arv. Med enkle ord kan vi sige, at en klasse, der har mere end én overordnet klasse, kaldes multi-level arv. Bemærk, at klasserne skal være på forskellige niveauer. Derfor eksisterer der en enkelt basisklasse og en enkelt afledt klasse, men flere mellemliggende basisklasser.
I ovenstående figur arver klassens karakterer medlemmerne eller metoderne fra klassens elever. Klassen Idræt arver medlemmerne af klassens Karakterer. Derfor er Elev-klassen forældreklasse for klassen Karakterer og klassen Karakterer er forældre til klassen Idræt. Derfor arver klassen Sport implicit elevens egenskaber sammen med klassens karakterer.
Lad os implementere multi-level arvemekanismen i et Java-program.
MultilevelInheritanceExample.java
//super class class Student { int reg_no; void getNo(int no) { reg_no=no; } void putNo() { System.out.println('registration number= '+reg_no); } } //intermediate sub class class Marks extends Student { float marks; void getMarks(float m) { marks=m; } void putMarks() { System.out.println('marks= '+marks); } } //derived class class Sports extends Marks { float score; void getScore(float scr) { score=scr; } void putScore() { System.out.println('score= '+score); } } public class MultilevelInheritanceExample { public static void main(String args[]) { Sports ob=new Sports(); ob.getNo(0987); ob.putNo(); ob.getMarks(78); ob.putMarks(); ob.getScore(68.7); ob.putScore(); } }
Produktion:
registration number= 0987 marks= 78.0 score= 68.7
Hierarkisk arv
Hvis et antal klasser er afledt af en enkelt basisklasse, kaldes det hierarkisk arv .
I ovenstående figur arver klasserne Science, Commerce og Arts en enkeltforælderklasse ved navn Student.
Lad os implementere den hierarkiske arvemekanisme i et Java-program.
HierarchicalInheritanceExample.java
//parent class class Student { public void methodStudent() { System.out.println('The method of the class Student invoked.'); } } class Science extends Student { public void methodScience() { System.out.println('The method of the class Science invoked.'); } } class Commerce extends Student { public void methodCommerce() { System.out.println('The method of the class Commerce invoked.'); } } class Arts extends Student { public void methodArts() { System.out.println('The method of the class Arts invoked.'); } } public class HierarchicalInheritanceExample { public static void main(String args[]) { Science sci = new Science(); Commerce comm = new Commerce(); Arts art = new Arts(); //all the sub classes can access the method of super class sci.methodStudent(); comm.methodStudent(); art.methodStudent(); } }
Produktion:
The method of the class Student invoked. The method of the class Student invoked. The method of the class Student invoked.
Hybrid arv
Hybride midler består af mere end én. Hybrid arv er kombinationen af to eller flere typer arv.
I ovenstående figur er bedstefar en super klasse. Fader-klassen arver egenskaberne fra bedstefar-klassen. Da far og bedstefar repræsenterer enkeltarv. Yderligere er Fader-klassen arvet af Søn og Datter-klassen. Dermed bliver Faderen forældreklasse for Søn og Datter. Disse klasser repræsenterer den hierarkiske arv. Tilsammen betegner det hybridarven.
Lad os implementere den hybride arvemekanisme i et Java-program.
Datter.java
//parent class class GrandFather { public void show() { System.out.println('I am grandfather.'); } } //inherits GrandFather properties class Father extends GrandFather { public void show() { System.out.println('I am father.'); } } //inherits Father properties class Son extends Father { public void show() { System.out.println('I am son.'); } } //inherits Father properties public class Daughter extends Father { public void show() { System.out.println('I am a daughter.'); } public static void main(String args[]) { Daughter obj = new Daughter(); obj.show(); } }
Produktion:
I am daughter.
Multipel arv (ikke understøttet)
Java understøtter ikke flere nedarvninger på grund af tvetydighed. Overvej for eksempel følgende Java-program.
Demo.java
class Wishes { void message() { System.out.println('Best of Luck!!'); } } class Birthday { void message() { System.out.println('Happy Birthday!!'); } } public class Demo extends Wishes, Birthday //considering a scenario { public static void main(String args[]) { Demo obj=new Demo(); //can't decide which classes' message() method will be invoked obj.message(); } }
Ovenstående kode giver fejl, fordi compileren ikke kan bestemme, hvilken message()-metode der skal aktiveres. På grund af denne grund understøtter Java ikke flere nedarvninger på klasseniveau, men kan opnås gennem en interface .