Arv i Java er en mekanisme, hvor et objekt erhverver alle egenskaber og adfærd fra et overordnet objekt. Det er en vigtig del af OOPs (Objektorienteret programmeringssystem).
Ideen bag arv i Java er, at du kan skabe nyt klasser der er bygget på eksisterende klasser. Når du arver fra en eksisterende klasse, kan du genbruge metoder og felter i den overordnede klasse. Desuden kan du tilføje nye metoder og felter i din nuværende klasse også.
Arv repræsenterer ER-ET forhold som også er kendt som en forældre-barn forhold.
Hvorfor bruge arv i java
- Til Metode tilsidesættelse (så runtime polymorfi kan opnås).
- Til genbrug af kode.
Begreber brugt i Arv
Syntaksen for Java Inheritance
class Subclass-name extends Superclass-name { //methods and fields }
Det udvider søgeord angiver, at du laver en ny klasse, der stammer fra en eksisterende klasse. Betydningen af 'forlænger' er at øge funktionaliteten.
10 potens af 6
I Javas terminologi kaldes en klasse, som er nedarvet, en forælder eller superklasse, og den nye klasse kaldes barn eller underklasse.
Eksempel på Java-arv
Som vist i ovenstående figur er programmør underklassen, og medarbejder er superklassen. Forholdet mellem de to klasser er Programmer IS-A medarbejder . Det betyder, at programmør er en type medarbejder.
begrænsninger af e-bank
class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } }Test det nu
Programmer salary is:40000.0 Bonus of programmer is:10000
I ovenstående eksempel kan Programmer-objektet få adgang til feltet for egen klasse såvel som for Employee-klassen, dvs. kodegenanvendelighed.
Typer af arv i java
På basis af klasse kan der være tre typer af arv i java: enkelt, multilevel og hierarkisk.
I java-programmering understøttes multipel og hybrid nedarvning kun via interface. Vi lærer om grænseflader senere.
Bemærk: Multipel nedarvning er ikke understøttet i Java gennem klasse.
Når en klasse arver flere klasser, er det kendt som multipel arv. For eksempel:
Enkeltarv eksempel
Når en klasse arver en anden klasse, er den kendt som en enkeltarv . I eksemplet nedenfor arver hundeklassen Animal-klassen, så der er den enkelte arv.
Fil: TestInheritance.java
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }}
Produktion:
barking... eating...
Eksempel på arv på flere niveauer
Når der er en arvekæde, er det kendt som arv på flere niveauer . Som du kan se i eksemplet nedenfor, arver BabyDog-klassen Dog-klassen, som igen arver Animal-klassen, så der er en arv på flere niveauer.
Fil: TestInheritance2.java
json fra java-objekt
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }}
Produktion:
weeping... barking... eating...
Hierarkisk arveeksempel
Når to eller flere klasser arver en enkelt klasse, er den kendt som hierarkisk arv . I eksemplet nedenfor arver hunde- og katklasser klassen Animal, så der er hierarkisk arv.
Fil: TestInheritance3.java
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }}
Produktion:
gimp hvordan man fravælger
meowing... eating...
Q) Hvorfor multipel nedarvning ikke understøttes i java?
For at reducere kompleksiteten og forenkle sproget understøttes multipel nedarvning ikke i java.
Overvej et scenarie, hvor A, B og C er tre klasser. C-klassen arver A- og B-klasserne. Hvis A- og B-klasser har samme metode, og du kalder det fra et underordnet klasseobjekt, vil der være tvetydighed at kalde metoden for A- eller B-klasse.
Da kompileringsfejl er bedre end runtime-fejl, gengiver Java kompileringsfejl, hvis du arver 2 klasser. Så uanset om du har samme metode eller anderledes, vil der være kompileringstidsfejl.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Test det nu
Compile Time Error