Arv i Java (med exempel)

Vad är arv?

Arv är en mekanism där en klass förvärvar en annan klasss egendom. Ett barn ärver till exempel sina föräldrars egenskaper. Med arv kan vi återanvända fälten och metoderna i den befintliga klassen. Därför underlättar arv återanvändbarhet och är ett viktigt koncept för OOPs.

Vad är arv i Java?

Java Arv är en mekanism där en klass förvärvar en annan klasss egendom. I Java, när ett "Is-A"-förhållande finns mellan två klasser använder vi Arv. Förälderklassen kallas superklass och den ärvda klassen kallas underklass. Nyckelordet extends används av underklassen för att ärva funktionerna i superklassen. Arv är viktigt eftersom det leder till återanvändning av kod.

Java Arvssyntax:

class subClass extends superClass  
{  
   //methods and fields  
} 

Typer av arv i Java

Här är de olika typerna av arv i Java:

  1. Enstaka arv
  2. Flera arv
  3. Arv på flera nivåer
  4. Hierarkisk arv
  5. Hybrid arv

1. Enstaka arv:

I Single Inheritance utökar en klass en annan klass (endast en klass).

Enstaka arv i Java
Enstaka arv

I diagrammet ovan sträcker Klass B endast Klass A. Klass A är en superklass och Klass B är en underklass.

2. Multipelt arv:

Multipelarv är ett av arvet i Java typer där en klass sträcker sig över mer än en klass. Java stöder inte multipelt arv.

Multipelarv i Java
Java Flera arv

Enligt diagrammet ovan utökar klass C både klass A och klass B.

3. Arv på flera nivåer:

I Multilevel Inheritance kan en klass ärva från en härledd klass. Därför blir den härledda klassen basklassen för den nya klassen.

Multilevel Arv in Java
Arv på flera nivåer

Som visas i diagrammet är Klass C underklass av B och B är en underklass Klass A.

4. Hierarkiskt arv:

I Hierarchical Inheritance ärvs en klass av många underklasser.


Hierarkiskt arv i Java
Hierarkisk arv

Enligt ovanstående exempel ärver klass B, C och D samma klass A.

5. Hybrid arv:

Hybrid arv är en av arvstyperna i Java som är en kombination av enkel- och multipelarv.


Hybrid arv
Hybrid arv

Enligt ovanstående exempel ärvs alla offentliga och skyddade medlemmar av klass A till klass D, först via klass B och för det andra via klass C.

Obs: Java stöder inte hybrid/multipel arv

Arv i Java Exempelvis

Här är ett exempel på arv i Java:


Exempel på Java Arv
Java Arvsexempel

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Super nyckelord

Supersökordet liknar "det här" sökordet. Nyckelordet super kan användas för att komma åt vilken datamedlem eller metoder som helst i den överordnade klassen. Super nyckelord kan användas på variabel, metod och konstruktörsnivå.

Syntax:

super.<method-name>();

Kontrollera också: - detta sökord i Java: Vad är & hur man använder med Exempel

Lär dig arv i OOP med exempel

Överväg samma bankansökan från tidigare exempel.

Vi är tänkta att öppna två olika kontotyper, en för att spara och en annan för att kontrollera (även känd som aktuell).

Arv i OOP

Låt oss jämföra och studera hur vi kan närma oss kodning från en strukturerat och objektorienterat programmeringsperspektiv.

Strukturellt tillvägagångssätt: I strukturerad programmering kommer vi att skapa två funktioner –

  1. En att dra tillbaka
  2. Och den andra för insättningsåtgärder.

Eftersom dessa funktioner fungerar förblir desamma i alla konton.

Arv i OOP:s

OOP:s tillvägagångssätt: När du använder Hoppsan programmeringsmetod. Vi skulle skapa två klasser.

  • Var och en har implementering av insättnings- och uttagsfunktioner.
  • Detta kommer att överflödigt extraarbete.

Arv i OOP:s

Ändringsförfrågan i programvaran

Nu sker en förändring i kravspecifikationen för något som är så vanligt i mjukvarubranschen. Du är tänkt att lägga till funktionsprivilegierade bankkonto med kontokredit. Som bakgrund är övertrassering en möjlighet där du kan ta ut ett belopp som är mer än tillgängligt saldo på ditt konto.

Ändringsförfrågan i programvaran

Strukturellt tillvägagångssätt: Med ett funktionellt tillvägagångssätt måste jag modifiera min uttagsfunktion, som redan är testad och baslinje. Och lägg till en metod som nedan kommer att ta hand om nya krav.

Ändringsförfrågan i programvaran

OOP:s tillvägagångssätt: Med OOP:s tillvägagångssätt behöver du bara skriva en ny klass med unik implementering av uttagsfunktionen. Vi rörde aldrig den testade kodbiten.

Ändringsförfrågan i programvaran

Ännu en ändringsförfrågan

Vad händer om kravet ändras ytterligare? Gillar att lägga till kreditkortskonto med sitt eget unika krav på insättningar.

Flera ändringsbegäran i mjukvarukrav

Strukturellt tillvägagångssätt: Genom att använda strukturell metod måste du ändra testade insättningskod igen.

Strukturellt förhållningssätt till flera ändringsförfrågningar i programvara

OOP:s tillvägagångssätt: Men med ett objektorienterat tillvägagångssätt kommer du bara att skapa en ny klass med dess unika implementering av insättningsmetoden (markerad röd i bilden nedan). Så även om den strukturella programmeringen verkar vara ett enkelt tillvägagångssätt initialt, vinner OOP på lång sikt.

OOP:s inställning till multipla ändringsbegäranden

Fördelar med arv i OOPs

Men man kan hävda att i alla klasser har du en upprepad kodbit.

För att övervinna detta skapar du en förälderklass, säger "konto" och implementerar samma funktion för insättning och uttag. Och gör barnklasser till en ärvd "konto"-klass. Så att de ska ha tillgång till uttags- och insättningsfunktioner i kontoklass. Funktionerna behöver inte implementeras individuellt. Detta är Arv i java. .

Fördelar med arv i OOPs

Fördelar med arv i OOPs