Arv er den kraftigste funksjonen i objektorientert programmering. Det lar oss arve egenskapene til en klasse inn i en annen klasse. I denne delen vil vi diskutere typer arv i Java i dybden med eksempler fra det virkelige liv. Vi vil også lage Java-programmer for å implementere konseptet med ulike typer arv.
Arv
Arv er en mekanisme for å kjøre en ny klasse fra en eksisterende klasse. Den eksisterende (gamle) klassen er kjent som grunnklasse eller super klasse eller foreldreklasse . Den nye klassen er kjent som en avledet klasse eller underklasse eller barneklasse . Den lar oss bruke egenskapene og oppførselen til en klasse (foreldre) i en annen klasse (barn).
En klasse hvis egenskaper er arvet er kjent som foreldreklasse og en klasse som arver egenskapene til den overordnede klassen er kjent som barneklasse . Dermed etablerer det et forhold mellom foreldre og barneklasse som er kjent som foreldre-barn eller Er en forhold.
Anta at det er to klasser som heter Far og Barn og vi ønsker å arve egenskapene til Fader-klassen i Child-klassen. Vi kan oppnå dette ved å bruke strekker nøkkelord.
//inherits the properties of the Father class class Child extends Father { //functionality }
Når skal vi bruke arv?
Arv gir gjenbrukbarhet kode, spesielt når det er en stor skala av kode som kan gjenbrukes. Det etablerer også forholdet mellom forskjellige klasser som er kjent som en Er en forhold. Vi kan også bruke det hvis vi ønsker å oppnå metodeoverstyrende .
Poeng å huske
- Konstruktør kan ikke arves i Java.
- Private medlemmer blir ikke arvet i Java.
- Syklisk arv er ikke tillatt i Java.
- Tilordne overordnet referanse til underordnede objekter.
- Konstruktører blir utført på grunn av super() tilstede i konstruktøren.
Typer av arv
Java støtter følgende fire typer arv:
- Enkeltarv
- Arv på flere nivåer
- Hierarkisk arv
- Hybrid arv
Merk: Multippel arv støttes ikke i Java.
La oss diskutere hver med riktig eksempel.
Enkeltarv
I enkeltarv er en underklasse avledet fra bare en superklasse. Den arver egenskapene og oppførselen til en enkeltforelderklasse. Noen ganger er det også kjent som enkel arv .
I figuren ovenfor er Ansatt en foreldreklasse og Executive er en barneklasse. Executive-klassen arver alle egenskapene til Employee-klassen.
La oss implementere den enkle arvemekanismen i et Java-program.
Executive.java
java-listen er tom
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); } }
Produksjon:
Total salary credited: 414408.0 Bonus of six months: 18000.0
Arv på flere nivåer
I flernivåarv , en klasse er avledet fra en klasse som også er avledet fra en annen klasse kalles multi-level arv. Med enkle ord kan vi si at en klasse som har mer enn én overordnet klasse kalles multi-level arv. Merk at klassene må være på ulike nivåer. Derfor eksisterer det en enkelt baseklasse og en enkelt avledet klasse, men flere mellomliggende baseklasser.
I figuren ovenfor arver klassekarakterene medlemmene eller metodene til klassestudentene. Klassen Idrett arver medlemmene av klassens karakterer. Derfor er Studentklassen foreldreklassen til klassen Merker og klassen Merker er forelderen til klassen Sport. Derfor arver klassen Sport implisitt egenskapene til studenten sammen med klassekarakterene.
La oss implementere multi-level arvemekanismen i et Java-program.
Multilevel InheritanceExample.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(); } }
Produksjon:
registration number= 0987 marks= 78.0 score= 68.7
Hierarkisk arv
Hvis et antall klasser er avledet fra en enkelt basisklasse, kalles den hierarkisk arv .
I figuren ovenfor arver klassene Science, Commerce og Arts en enkeltforelderklasse kalt Student.
La oss implementere den hierarkiske arvemekanismen 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(); } }
Produksjon:
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 av mer enn én. Hybrid arv er kombinasjonen av to eller flere typer arv.
I figuren ovenfor er bestefar en superklasse. Fader-klassen arver egenskapene til Bestefar-klassen. Siden far og bestefar representerer enkeltarv. Videre er Fader-klassen arvet av Sønn og Datter-klassen. Dermed blir Faderen foreldreklassen for Sønn og Datter. Disse klassene representerer den hierarkiske arven. Til sammen betegner det hybridarven.
La oss implementere den hybride arvemekanismen 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(); } }
Produksjon:
I am daughter.
Multippel arv (støttes ikke)
Java støtter ikke flere arv på grunn av tvetydighet. Tenk for eksempel på 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(); } }
Koden ovenfor gir feil fordi kompilatoren ikke kan bestemme hvilken melding()-metode som skal påkalles. På grunn av denne grunn støtter ikke Java flere arv på klassenivå, men kan oppnås gjennom en grensesnitt .