logo

Arv i Java

Java, arv er en viktig pilar i OOP (Object-Oriented Programming). Det er mekanismen i Java som en klasse får lov til å arve funksjonene (felt og metoder) til en annen klasse. I Java betyr arv å lage nye klasser basert på eksisterende. En klasse som arver fra en annen klasse kan gjenbruke metodene og feltene til den klassen. I tillegg kan du legge til nye felt og metoder til din nåværende klasse også.

Hvorfor trenger vi Java-arv?

  • Gjenbrukbarhet av kode: Koden skrevet i Superklassen er felles for alle underklasser. Barneklasser kan bruke den overordnede klassekoden direkte.
  • Metodeoverstyring: Metodeoverstyring er kun oppnåelig gjennom arv. Det er en av måtene Java oppnår Run Time Polymorphism på.
  • Abstraksjon: Konseptet med abstrakt der vi ikke trenger å gi alle detaljer oppnås gjennom arv. Abstraksjon viser bare funksjonaliteten til brukeren.

Viktige terminologier som brukes i Java-arv

  • Klasse: Klasse er et sett med objekter som deler felles egenskaper/adferd og felles egenskaper/attributter. Klasse er ikke en virkelighet. Det er bare en mal eller blåkopi eller prototype som objekter lages fra.
  • Superklasse/foreldreklasse: Klassen hvis funksjoner er arvet er kjent som en superklasse (eller en basisklasse eller en overordnet klasse).
  • Underklasse/barneklasse: Klassen som arver den andre klassen er kjent som en underklasse (eller en avledet klasse, utvidet klasse eller barneklasse). Underklassen kan legge til egne felt og metoder i tillegg til superklassefeltene og -metodene.
  • Gjenbrukbarhet: Arv støtter konseptet gjenbruk, dvs. når vi ønsker å lage en ny klasse og det allerede er en klasse som inkluderer noe av koden vi ønsker, kan vi utlede vår nye klasse fra den eksisterende klassen. Ved å gjøre dette gjenbruker vi feltene og metodene til den eksisterende klassen.

Hvordan bruke arv i Java?

De utvider nøkkelordet brukes for arv i Java. Å bruke utvides nøkkelordet indikerer at du er avledet fra en eksisterende klasse. Med andre ord, utvider refererer til økt funksjonalitet.



boblesorteringspyton

Syntaks:

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

Eksempel på arv i Java

Eksempel: I eksemplet nedenfor på arv, er klasse Sykkel en basisklasse, klasse MountainBike er en avledet klasse som utvider sykkelklassen og klasse Test er en førerklasse for å kjø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());  } }>

Produksjon
No of gears are 3 speed of bicycle is 100 seat height is 25>

I programmet ovenfor, når et objekt av MountainBike-klassen opprettes, får en kopi av alle metoder og felt i superklassen minne i dette objektet. Derfor kan vi ved å bruke objektet til underklassen også få tilgang til medlemmene av en superklasse.



Vær oppmerksom på at under arv bare objektet til underklassen opprettes, ikke superklassen. For mer, se Java-objektoppretting av arvet klasse .

Eksempel 2: I eksemplet nedenfor på arv er klassen Employee en basisklasse, klassen Engineer er en avledet klasse som utvider Employee-klassen og klassen Test er en driverklasse for å kjø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);  } }>

Produksjon
Salary : 60000 Benefits : 10000>

Illustrasjonsbilde av programmet:



hvordan konvertere streng til int java
Arv i Java

I praksis, arv, og polymorfisme brukes sammen i Java for å oppnå rask ytelse og lesbarhet av kode.

Java arvetyper

Nedenfor er de forskjellige typer arv som støttes av Java.

  1. Enkeltarv
  2. Flernivåarv
  3. Hierarkisk arv
  4. Multippel arv
  5. Hybrid arv

1. 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 nedenfor er 'A' en foreldreklasse og 'B' er en barneklasse. Klassen 'B' arver alle egenskapene til klassen 'A'.

Enkeltarv

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

Produksjon
Geeks for Geeks>

2. Flernivåarv

I Multilevel Inheritance vil en avledet klasse arve en basisklasse, og i tillegg til den avledede klassen fungerer også som basisklassen for andre klasser. I bildet nedenfor fungerer klasse A som en basisklasse for den avledede klassen B, som igjen fungerer som en basisklasse for den avledede klassen C. I Java kan ikke en klasse få direkte tilgang til besteforeldres medlemmer .

Flernivåarv

Flernivåarv

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

Produksjon
Geeks for Geeks>

3. Hierarkisk arv

I Hierarchical Inheritance fungerer én klasse som en superklasse (grunnklasse) for mer enn én underklasse. I bildet nedenfor fungerer klasse A som en basisklasse for de avledede klassene B, C og D.

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

Produksjon
Class A Class B Class A Class C Class A Class D>

4. Multippel arv ( Gjennom grensesnitt)

I Flere arv , én klasse kan ha mer enn én superklasse og arve funksjoner fra alle overordnede klasser. Vær oppmerksom på at Java gjør det ikke Brukerstøtte flere arv med klasser. I Java kan vi oppnå flere arv bare gjennom Grensesnitt . På bildet nedenfor er klasse C avledet fra grensesnitt A og B.

Multippel arv

Multippel arv

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

Produksjon
Geeks for Geeks>

5. Hybrid arv

Det er en blanding av to eller flere av de ovennevnte arvetypene. Siden Java ikke støtter flere arv med klasser, er hybrid arv som involverer multippel arv heller ikke mulig med klasser. I Java kan vi oppnå hybrid arv bare gjennom Grensesnitt hvis vi ønsker å involvere multippel arv for å implementere Hybrid arv.
Det er imidlertid viktig å merke seg at hybrid arv ikke nødvendigvis krever bruk av multiple arv utelukkende. Det kan oppnås gjennom en kombinasjon av flernivåarv og hierarkisk arv med klasser, hierarkisk og enkeltarv med klasser. Derfor er det faktisk mulig å implementere hybridarv ved å bruke klasser alene, uten å stole på flere arvetyper.

Hybrid arv

Hybrid arv

Java IS-En type forhold

IS-A er en måte å si: Dette objektet er en type av det objektet. La oss se hvordan søkeordet extends brukes for å oppnå arv.

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

Nå, basert på eksemplet ovenfor, i objektorienterte termer, er følgende sant:-

c program for strengsammenligning
  • SolarSystem er superklassen i jordklassen.
  • SolarSystem er superklassen i Mars-klassen.
  • Jorden og Mars er underklasser av SolarSystem-klassen.
  • Månen er underklassen av både jord- og solsystemklassene.
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);  } }>

Produksjon
true true true>

Hva kan gjøres i en underklasse?

I underklasser kan vi arve medlemmer som de er, erstatte dem, skjule dem eller supplere dem med nye medlemmer:

  • De arvede feltene kan brukes direkte, akkurat som alle andre felt.
  • Vi kan deklarere nye felt i underklassen som ikke er i superklassen.
  • De nedarvede metodene kan brukes direkte som de er.
  • Vi kan skrive en ny forekomst metode i underklassen som har samme signatur som den i superklassen, altså overordnet det (som i eksemplet ovenfor, toString() metoden overstyres).
  • Vi kan skrive en ny statisk metode i underklassen som har samme signatur som den i superklassen, altså skjule den.
  • Vi kan deklarere nye metoder i underklassen som ikke er i superklassen.
  • Vi kan skrive en underklassekonstruktør som påkaller konstruktøren til superklassen, enten implisitt eller ved å bruke nøkkelordet super .

Fordeler med arv i Java:

  1. Gjenbrukbarhet av kode: Arv gir mulighet for gjenbruk av kode og reduserer mengden kode som må skrives. Underklassen kan gjenbruke egenskapene og metodene til superklassen, og redusere duplisering av kode.
  2. Abstraksjon: Arv gjør det mulig å lage abstrakte klasser som definerer et felles grensesnitt for en gruppe relaterte klasser. Dette fremmer abstraksjon og innkapsling, noe som gjør koden lettere å vedlikeholde og utvide.
  3. Klassehierarki: Arv gjør det mulig å lage et klassehierarki, som kan brukes til å modellere virkelige objekter og deres relasjoner.
  4. Polymorfisme: Arv gir mulighet for polymorfisme, som er evnen til et objekt til å ta på seg flere former. Underklasser kan overstyre metodene til superklassen, noe som lar dem endre oppførselen sin på forskjellige måter.

Ulemper med arv i Java:

  1. Kompleksitet: Arv kan gjøre koden mer kompleks og vanskeligere å forstå. Dette gjelder spesielt hvis arvehierarkiet er dypt eller hvis det brukes flere arv.
  2. Tett kobling: Arv skaper en tett kobling mellom superklassen og underklassen, noe som gjør det vanskelig å gjøre endringer i superklassen uten å påvirke underklassen.

Konklusjon

La oss sjekke noen viktige punkter fra artikkelen er nevnt nedenfor:

  • Standard superklasse : Unntatt Gjenstand klasse, som ikke har noen superklasse, hver klasse har én og bare én direkte superklasse (enkelt arv). I fravær av noen annen eksplisitt superklasse, er hver klasse implisitt en underklasse av Object-klassen.
  • Superklasse kan bare være én: En superklasse kan ha et hvilket som helst antall underklasser. Men en underklasse kan bare ha en superklasse. Dette er fordi Java ikke støtter flere arv med klasser. Selv med grensesnitt støttes flere arv av Java.
  • Arvede konstruktører: En underklasse arver alle medlemmene (felt, metoder og nestede klasser) fra sin superklasse. Konstruktører er ikke medlemmer, så de arves ikke av underklasser, men konstruktøren av superklassen kan påkalles fra underklassen.
  • Privat medlemsarv: En underklasse arver ikke de private medlemmene av sin overordnede klasse. Imidlertid, hvis superklassen har offentlige eller beskyttede metoder (som gettere og settere) for å få tilgang til sine private felt, kan disse også brukes av underklassen.

Vanlige spørsmål i arv

1. Hva er Inheritance Java?

Arv er et konsept med OOPs der en klasse arver fra en annen klasse som kan gjenbruke metodene og feltene til overordnet klasse.

2. Hva er de 4 arvetypene i Java?

Det er Single, Multiple, Multilevel, Hierarkisk og Hybrid

3. Hva er bruken av forleng søkeord?

Extend nøkkelord brukes for å arve en klasse til en annen.

4. Hva er et eksempel på arv i Java?

Et eksempel fra den virkelige verden på arv i Java er nevnt nedenfor:

Tenk på en gruppe kjøretøy. Du må opprette klasser for buss, bil og lastebil. Metodene fuelAmount(), kapasitet(), applyBrakes() vil være de samme for alle tre klassene.

Brukte referanser:

  1. Head First Java av Kathy Sierra og Bert Bates
  2. Java: En nybegynnerveiledning 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.