logo

Arv i Java

Java, Arv är en viktig pelare i OOP (Object-Oriented Programming). Det är mekanismen i Java genom vilken en klass tillåts ärva funktionerna (fält och metoder) från en annan klass. I Java betyder arv att skapa nya klasser baserade på befintliga. En klass som ärver från en annan klass kan återanvända den klassens metoder och fält. Dessutom kan du lägga till nya fält och metoder till din nuvarande klass också.

Varför behöver vi Java Arv?

  • Kodåteranvändbarhet: Koden som skrivs i Superklassen är gemensam för alla underklasser. Barnklasser kan direkt använda föräldraklasskoden.
  • Åsidosättande av metod: Metod Åsidosättande kan endast uppnås genom arv. Det är ett av sätten som Java uppnår Run Time Polymorphism.
  • Abstraktion: Konceptet abstrakt där vi inte behöver tillhandahålla alla detaljer uppnås genom arv. Abstraktion visar endast funktionen för användaren.

Viktiga terminologier som används i Java Arv

  • Klass: Klass är en uppsättning objekt som delar gemensamma egenskaper/beteende och gemensamma egenskaper/attribut. Klass är inte en verklig enhet. Det är bara en mall eller ritning eller prototyp från vilken objekt skapas.
  • Superklass/förälderklass: Klassen vars egenskaper ärvs är känd som en superklass (eller en basklass eller en överordnad klass).
  • Underklass/barnklass: Klassen som ärver den andra klassen är känd som en underklass (eller en härledd klass, utökad klass eller barnklass). Underklassen kan lägga till sina egna fält och metoder utöver superklassfälten och metoderna.
  • Återanvändbarhet: Arv stödjer begreppet återanvändbarhet, det vill säga när vi vill skapa en ny klass och det redan finns en klass som innehåller en del av koden som vi vill ha, kan vi härleda vår nya klass från den befintliga klassen. Genom att göra detta återanvänder vi fälten och metoderna i den befintliga klassen.

Hur man använder arv i Java?

De utökar nyckelordet används för arv i Java. Att använda nyckelordet extends indikerar att du kommer från en befintlig klass. Med andra ord avser extends ökad funktionalitet.

abstrakt klass i java

Syntax :



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

Arv i Java Exempel

Exempel: I exemplet nedan på arv är klass Cykel en basklass, klass MountainBike är en härledd klass som utökar cykelklassen och klass Test är en förarklass för att köra 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 programmet ovan, när ett objekt av MountainBike-klassen skapas, får en kopia av alla metoder och fält i superklassen minne i detta objekt. Det är därför vi genom att använda subklassens objekt också kan komma åt medlemmarna i en superklass.

Observera att under nedärvning skapas endast objektet för underklassen, inte superklassen. För mer, se Java-objekt skapande av ärvd klass .

Exempel 2: I exemplet nedan på arv är klassen Employee en basklass, klassen Engineer är en härledd klass som utökar klassen Employee och klassen Test är en förarklass för att köra 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>

Illustrativ bild av programmet:

arp ett kommando
Arv i Java

I praktiken, arv, och polymorfism används tillsammans i Java för att uppnå snabb prestanda och läsbarhet av kod.

Java arvstyper

Nedan finns de olika typerna av arv som stöds av Java.

  1. Enstaka arv
  2. Arv på flera nivåer
  3. Hierarkiskt arv
  4. Multipelt arv
  5. Hybrid arv

1. Enstaka arv

Vid enkelarv härleds en underklass från endast en superklass. Den ärver egenskaperna och beteendet hos en ensamförälderklass. Ibland är det också känt som enkelt arv. I bilden nedan är 'A' en föräldraklass och 'B' är en barnklass. Klassen 'B' ärver alla egenskaper i klassen 'A'.

Enstaka arv

Enstaka arv

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. Arv på flera nivåer

I Multilevel Inheritance kommer en härledd klass att ärva en basklass, och den härledda klassen fungerar också som basklass för andra klasser. I bilden nedan fungerar klass A som en basklass för den härledda klassen B, som i sin tur fungerar som en basklass för den härledda klassen C. I Java kan en klass inte direkt komma åt farföräldrars medlemmar .

Arv på flera nivåer

Arv på flera nivåer

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. Hierarkiskt arv

I Hierarchical Inheritance fungerar en klass som en superklass (basklass) för mer än en underklass. I bilden nedan fungerar klass A som basklass för de härledda klasserna B, C och D.

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

Produktion
Class A Class B Class A Class C Class A Class D>

4. Multipelt arv ( Genom gränssnitt)

I Flera arv , en klass kan ha mer än en superklass och ärva funktioner från alla överordnade klasser. Observera att Java gör det inte Stöd flera arv med klasser. I Java kan vi uppnå flera arv endast genom Gränssnitt . I bilden nedan är klass C härledd från gränssnitt A och B.

Multipelt arv

Multipelt arv

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

Produktion
Geeks for Geeks>

5. Hybrid arv

Det är en blandning av två eller flera av ovanstående typer av arv. Eftersom Java inte stöder flera arv med klasser, är hybridarv som involverar multipelt arv inte heller möjligt med klasser. I Java kan vi uppnå hybridarv endast genom Gränssnitt om vi vill involvera multipelt arv för att implementera Hybrid-arv.
Det är dock viktigt att notera att hybridärvning inte nödvändigtvis kräver användning av enbart Multipelarv. Det kan uppnås genom en kombination av flernivåarv och hierarkiskt arv med klasser, hierarkiskt och enkelarv med klasser. Därför är det verkligen möjligt att implementera hybridarv med enbart klasser, utan att förlita sig på flera arvstyper.

maskinskriven för varje
Hybrid arv

Hybrid arv

Java IS-En typ av relation

IS-A är ett sätt att säga: Detta objekt är en typ av det objektet. Låt oss se hur sökordet extends används för att uppnå arv.

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

Nu, baserat på ovanstående exempel, i objektorienterade termer, är följande sant:-

  • SolarSystem är superklassen av jordklassen.
  • SolarSystem är superklassen av Mars-klassen.
  • Jorden och Mars är underklasser av klassen SolarSystem.
  • Månen är underklassen av både jord- och solsystemklasserna.
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);  } }>

Produktion
true true true>

Vad kan göras i en underklass?

I underklasser kan vi ärva medlemmar som de är, ersätta dem, gömma dem eller komplettera dem med nya medlemmar:

  • De ärvda fälten kan användas direkt, precis som alla andra fält.
  • Vi kan deklarera nya fält i underklassen som inte är i superklassen.
  • De ärvda metoderna kan användas direkt som de är.
  • Vi kan skriva en ny exempel metod i underklassen som har samma signatur som den i superklassen, alltså åsidosättande det (som i exemplet ovan, att stränga() metoden åsidosätts).
  • Vi kan skriva en ny statisk metod i underklassen som har samma signatur som den i superklassen, alltså gömmer sig Det.
  • Vi kan deklarera nya metoder i underklassen som inte finns i superklassen.
  • Vi kan skriva en underklasskonstruktor som anropar superklassens konstruktor, antingen implicit eller genom att använda nyckelordet super .

Fördelar med arv i Java:

  1. Kodåteranvändbarhet: Arv möjliggör kodåteranvändning och minskar mängden kod som behöver skrivas. Underklassen kan återanvända superklassens egenskaper och metoder, vilket minskar duplicering av kod.
  2. Abstraktion: Arv gör det möjligt att skapa abstrakta klasser som definierar ett gemensamt gränssnitt för en grupp relaterade klasser. Detta främjar abstraktion och inkapsling, vilket gör koden lättare att underhålla och utöka.
  3. Klasshierarki: Arv möjliggör skapandet av en klasshierarki, som kan användas för att modellera verkliga objekt och deras relationer.
  4. Polymorfism: Arv tillåter polymorfism, vilket är förmågan hos ett objekt att anta flera former. Underklasser kan åsidosätta superklassens metoder, vilket gör att de kan ändra sitt beteende på olika sätt.

Nackdelar med arv i Java:

  1. Komplexitet: Arv kan göra koden mer komplex och svårare att förstå. Detta gäller särskilt om arvshierarkin är djup eller om flera arv används.
  2. Tät koppling: Arv skapar en tät koppling mellan superklassen och underklassen, vilket gör det svårt att göra ändringar i superklassen utan att påverka underklassen.

Slutsats

Låt oss kontrollera några viktiga punkter från artikeln som nämns nedan:

  • Standard superklass : Bortsett från Objekt klass, som inte har någon superklass, varje klass har en och endast en direkt superklass (enkel arv). I avsaknad av någon annan explicit superklass är varje klass implicit en underklass till Object-klassen.
  • Superklass kan bara vara en: En superklass kan ha hur många underklasser som helst. Men en underklass kan bara ha ett superklass. Detta beror på att Java inte stöder flera arv med klasser. Även om med gränssnitt, stöds flera arv av Java.
  • Ärva konstruktörer: En underklass ärver alla medlemmar (fält, metoder och kapslade klasser) från sin superklass. Konstruktörer är inte medlemmar, så de ärvs inte av underklasser, men superklassens konstruktor kan anropas från underklassen.
  • Privat medlemsarv: En underklass ärver inte de privata medlemmarna i sin överordnade klass. Men om superklassen har offentliga eller skyddade metoder (som getters och setters) för att komma åt sina privata fält, kan dessa också användas av underklassen.

Vanliga frågor i Arv

1. Vad är Inheritance Java?

Arv är ett koncept av OOPs där en klass ärver från en annan klass som kan återanvända metoderna och fälten för den överordnade klassen.

ogiltig 0

2. Vilka är de fyra typerna av arv i Java?

Det finns Single, Multiple, Multilevel, Hierarkisk och Hybrid

3. Vad är användningen av förlänga sökord?

Nyckelordet Extend används för att ärva en klass till en annan.

4. Vad är ett exempel på arv i Java?

Ett verkligt exempel på arv i Java nämns nedan:

Tänk på en grupp av fordon. Du måste skapa klasser för buss, bil och lastbil. Metoderna fuelAmount(), capacity(), applyBrakes() kommer att vara desamma för alla tre klasserna.

Använda referenser:

  1. Head First Java av Kathy Sierra och Bert Bates
  2. Java: En nybörjarguide av Herbert Schildt
  3. Java: The Complete Reference av Herbert Schildt
  4. Effektiv Java av Joshua Bloch
  5. Java: The Good Parts av Jim Waldo.