Java, arv er en vigtig søjle i OOP (Object-Oriented Programming). Det er den mekanisme i Java, hvorved en klasse får lov til at arve funktionerne (felter og metoder) fra en anden klasse. I Java betyder arv at oprette nye klasser baseret på eksisterende. En klasse, der arver fra en anden klasse, kan genbruge den pågældende klasses metoder og felter. Derudover kan du også tilføje nye felter og metoder til din nuværende klasse.
Hvorfor har vi brug for Java-arv?
- Genanvendelighed af kode: Koden skrevet i Superklassen er fælles for alle underklasser. Børneklasser kan direkte bruge forældreklassekoden.
- Metodetilsidesættelse: Metode tilsidesættelse kan kun opnås gennem arv. Det er en af måderne, hvorpå Java opnår Run Time Polymorphism.
- Abstraktion: Konceptet abstrakt, hvor vi ikke behøver at give alle detaljer, opnås gennem arv. Abstraktion viser kun funktionaliteten til brugeren.
Vigtige terminologier, der bruges i Java-arv
- Klasse: Klasse er et sæt af objekter, der deler fælles egenskaber/adfærd og fælles egenskaber/attributter. Klasse er ikke en virkelighed. Det er blot en skabelon eller en blueprint eller prototype, som objekter er skabt ud fra.
- Superklasse/forældreklasse: Klassen, hvis funktioner er nedarvet, er kendt som en superklasse (eller en basisklasse eller en overordnet klasse).
- Underklasse/barneklasse: Klassen, der arver den anden klasse, er kendt som en underklasse (eller en afledt klasse, udvidet klasse eller underklasse). Underklassen kan tilføje sine egne felter og metoder ud over superklassens felter og metoder.
- Genanvendelighed: Arv understøtter begrebet genbrugelighed, dvs. når vi vil oprette en ny klasse, og der allerede er en klasse, der indeholder noget af den kode, vi ønsker, kan vi udlede vores nye klasse fra den eksisterende klasse. Ved at gøre dette genbruger vi felterne og metoderne i den eksisterende klasse.
Hvordan bruger man arv i Java?
Det udvider søgeord bruges til nedarvning i Java. Brug af nøgleordet extends angiver, at du stammer fra en eksisterende klasse. Med andre ord henviser udvider til øget funktionalitet.
10 potens af 6
Syntaks:
class DerivedClass extends BaseClass { //methods and fields }>Eksempel på arv i Java
Eksempel: I nedenstående eksempel på arv er klassen Cykel en basisklasse, klassen MountainBike er en afledt klasse, der udvider cykelklassen, og klassen Test er en førerklasse til at køre programmet.
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()); } }> Produktion
No of gears are 3 speed of bicycle is 100 seat height is 25>
I ovenstående program, når et objekt af MountainBike-klassen oprettes, får en kopi af alle metoder og felter i superklassen hukommelse i dette objekt. Derfor kan vi ved at bruge subklassens objekt også få adgang til medlemmerne af en superklasse.
Bemærk venligst, at under nedarvning oprettes kun objektet for underklassen, ikke superklassen. For mere, se Java-objektoprettelse af arvet klasse .
Eksempel 2: I nedenstående eksempel på arv er klasse Employee en basisklasse, klasse Engineer er en afledt klasse, der udvider Employee-klassen, og klasse Test er en driverklasse til at køre programmet.
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); } }> Produktion
Salary : 60000 Benefits : 10000>
Illustrerende billede af programmet:
begrænsninger af e-bank

I praksis, arv, og polymorfi bruges sammen i Java for at opnå hurtig ydeevne og læsbarhed af kode.
Java arvetyper
Nedenfor er de forskellige typer af arv, som understøttes af Java.
- Enkelt Arv
- Arv på flere niveauer
- Hierarkisk arv
- Multipel arv
- Hybrid arv
1. Enearv
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 nedenstående figur er 'A' en forældreklasse, og 'B' er en børneklasse. Klassen 'B' arver alle egenskaberne i klassen 'A'.

Enkeltarv
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(); } }> Produktion
Geeks for Geeks>
2. Multilevel Arv
I Multilevel Inheritance vil en afledt klasse arve en basisklasse, og såvel som den afledte klasse fungerer den som basisklasse for andre klasser. På billedet nedenfor tjener klasse A som en basisklasse for den afledte klasse B, som igen fungerer som en basisklasse for den afledte klasse C. I Java kan en klasse ikke direkte få adgang til bedsteforældres medlemmer .

Arv på flere niveauer
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(); } }> Produktion
Geeks for Geeks>
3. Hierarkisk arv
I Hierarchical Inheritance fungerer én klasse som en superklasse (basisklasse) for mere end én underklasse. På billedet nedenfor tjener klasse A som en basisklasse for de afledte klasser B, C og D.

// 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(); } }> Produktion
Class A Class B Class A Class C Class A Class D>
4. Multipel arv ( Gennem grænseflader)
I Flere arv , kan én klasse have mere end én superklasse og arve funktioner fra alle overordnede klasser. Bemærk venligst, at Java gør ikke support flere arv med klasser. I Java kan vi kun opnå flere arv gennem Grænseflader . På billedet nedenfor er klasse C afledt af grænseflader A og B.

Multipel arv
json fra java-objektJava
// 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(); } }> Produktion
Geeks for Geeks>
5. Hybrid arv
Det er en blanding af to eller flere af de ovennævnte typer af arv. Da Java ikke understøtter flere nedarvninger med klasser, er hybrid nedarvning, der involverer multipel nedarvning, heller ikke mulig med klasser. I Java kan vi kun opnå hybrid arv gennem Grænseflader hvis vi ønsker at involvere multipel arv for at implementere hybrid arv.
Det er dog vigtigt at bemærke, at hybrid nedarvning ikke nødvendigvis kræver udelukkende brug af Multiple Inheritance. Det kan opnås gennem en kombination af flerniveauarv og hierarkisk arv med klasser, hierarkisk og enkeltarv med klasser. Derfor er det faktisk muligt at implementere hybrid nedarvning ved at bruge klasser alene uden at stole på flere arvetyper.

Hybrid arv
Java IS-En type forhold
IS-A er en måde at sige: Dette objekt er en type af det objekt. Lad os se, hvordan søgeordet extends bruges til at opnå arv.
Java public class SolarSystem { } public class Earth extends SolarSystem { } public class Mars extends SolarSystem { } public class Moon extends Earth { }> Nu, baseret på ovenstående eksempel, i objektorienterede termer, er følgende sande:-
gimp hvordan man fravælger
- SolarSystem er superklassen i jordklassen.
- SolarSystem er superklassen af Mars-klassen.
- Jorden og Mars er underklasser af SolarSystem-klassen.
- Månen er underklassen af både Jorden og Solsystemets klasser.
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); } }> Produktion
true true true>
Hvad kan gøres i en underklasse?
I underklasser kan vi arve medlemmer som de er, erstatte dem, skjule dem eller supplere dem med nye medlemmer:
- De nedarvede felter kan bruges direkte, ligesom alle andre felter.
- Vi kan erklære nye felter i underklassen, som ikke er i superklassen.
- De nedarvede metoder kan bruges direkte, som de er.
- Vi kan skrive en ny eksempel metode i underklassen, der har samme signatur som den i superklassen, altså tilsidesættende det (som i eksemplet ovenfor, toString() metode er tilsidesat).
- Vi kan skrive en ny statisk metode i underklassen, der har samme signatur som den i superklassen, altså gemmer sig det.
- Vi kan erklære nye metoder i underklassen, som ikke er i superklassen.
- Vi kan skrive en underklassekonstruktør, der påkalder superklassens konstruktør, enten implicit eller ved at bruge nøgleordet super .
Fordele ved arv i Java:
- Kodegenanvendelighed: Nedarvning giver mulighed for genbrug af kode og reducerer mængden af kode, der skal skrives. Underklassen kan genbruge superklassens egenskaber og metoder, hvilket reducerer duplikering af kode.
- Abstraktion: Nedarvning giver mulighed for at skabe abstrakte klasser, der definerer en fælles grænseflade for en gruppe af relaterede klasser. Dette fremmer abstraktion og indkapsling, hvilket gør koden lettere at vedligeholde og udvide.
- Klassehierarki: Nedarvning giver mulighed for at skabe et klassehierarki, som kan bruges til at modellere objekter i den virkelige verden og deres relationer.
- Polymorfi: Arv giver mulighed for polymorfi, som er et objekts evne til at antage flere former. Underklasser kan tilsidesætte superklassens metoder, hvilket giver dem mulighed for at ændre deres adfærd på forskellige måder.
Ulemper ved arv i Java:
- Kompleksitet: Nedarvning kan gøre koden mere kompleks og sværere at forstå. Dette gælder især, hvis arvehierarkiet er dybt, eller hvis der bruges flere arv.
- Tæt kobling: Nedarvning skaber en tæt kobling mellem superklassen og underklassen, hvilket gør det vanskeligt at foretage ændringer i superklassen uden at påvirke underklassen.
Konklusion
Lad os tjekke nogle vigtige punkter fra artiklen er nævnt nedenfor:
- Standard superklasse : Undtagen Objekt klasse, som ikke har nogen superklasse, hver klasse har én og kun én direkte superklasse (enkelt arv). I fravær af nogen anden eksplicit superklasse er hver klasse implicit en underklasse af Object-klassen.
- Superklasse kan kun være én: En superklasse kan have et hvilket som helst antal underklasser. Men en underklasse kan kun have en superklasse. Dette skyldes, at Java ikke understøtter flere nedarvninger med klasser. Selvom med grænseflader, understøttes flere nedarvninger af Java.
- Arvede konstruktører: En underklasse arver alle medlemmerne (felter, metoder og indlejrede klasser) fra sin superklasse. Konstruktører er ikke medlemmer, så de nedarves ikke af underklasser, men superklassens konstruktør kan påkaldes fra underklassen.
- Privat medlemsarv: En underklasse arver ikke de private medlemmer af sin overordnede klasse. Men hvis superklassen har offentlige eller beskyttede metoder (som getters og settere) til at få adgang til dens private felter, kan disse også bruges af underklassen.
Ofte stillede spørgsmål i arv
1. Hvad er Inheritance Java?
Arv er et koncept af OOP'er, hvor en klasse arver fra en anden klasse, der kan genbruge metoderne og felterne i den overordnede klasse.
2. Hvad er de 4 typer af arv i Java?
Der er Single, Multiple, Multilevel, Hierarkisk og Hybrid
3. Hvad er brugen af udvide søgeord?
Nøgleordet Extend bruges til at nedarve en klasse til en anden.
4. Hvad er et eksempel på arv i Java?
Et eksempel fra den virkelige verden på arv i Java er nævnt nedenfor:
Overvej en gruppe af køretøjer. Du skal oprette klasser for bus, bil og lastbil. Metoderne fuelAmount(), kapacitet(), applyBrakes() vil være de samme for alle tre klasser.
Brugte referencer:
- Head First Java af Kathy Sierra og Bert Bates
- Java: En begyndervejledning af Herbert Schildt
- Java: The Complete Reference af Herbert Schildt
- Effektiv Java af Joshua Bloch
- Java: The Good Parts af Jim Waldo.