Kursinnehåll
Java OOP
Java OOP
OOP-Principer: Arv
Arv
Låt oss diskutera principen inom OOP – Arv.
Arv är en mekanism som möjliggör skapandet av klasser baserade på en annan klass.
Klassen som fungerar som bas kallas förälder eller superklass;
Klassen som skapas baserat på föräldraklassen kallas barn, subklass eller avkomling.
På så sätt kan barnklassen ärva egenskaper och attribut från en annan klass – föräldraklassen (dess metoder och variabler).
Du kan ärva en klass med hjälp av nyckelordet extends
. Syntaxen för en barnklass som ärver från en föräldraklass ser ut så här:
Child.java
class Child extends Parent { // properties and methods }
Låt oss titta på ett exempel på hur arv fungerar i kod. Vi har en klass Bird
med vissa fält och metoder, och det finns en klass Parrot
med sina egna fält och metoder. En papegoja är en fågel, så logiskt sett bör papegojan ärva från klassen Bird
:
Här är koden från skärmdumpen, omskriven för bättre läsbarhet och tydlighet:
Bird.java
Parrot.java
Main.java
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
Låt oss förstå vad som händer i dessa bilder:
Vi skapar en klass
Bird
, som är föräldraklassen i vårt fall. Denna klass har sina egna fält och metoder;Vi skapar en klass
Parrot
, som använder nyckelordetextends
för att ärva från föräldraklassenBird
. KlassenParrot
är en barnklass och har sina egna fält och metoder. Dessutom, som barnklass, ärverParrot
alla fält och metoder från föräldraklassenBird
;Vi skapar ett objekt av klassen
Parrot
imain
-metoden och ser att vi kan initiera fälten för bådeföräldra- och barnklassen. Först initierar vi fälten i föräldraklassenBird
, och sedan initierar vi fälten i barnklassenParrot
. Därefter anropar vi metoderna: först metoderna i föräldraklassen och sedan metoden i barnklassen.
På så sätt använde vi arv för att ärva klassen Bird
.
Varför gör vi detta?
När vi har många olika underklasser till Bird
, inte bara Parrot
, till exempel finns även Pigeon
och Penguin
. I det fallet kommer vi att ha många duplicerade fält, såsom boolean canFly
. Det första arvet hjälper till med är att undvika duplicerade kodfragment.
Dessutom förbättras läsbarheten avsevärt. I praktiken stöter du sällan på klassen Bird
och dess underklasser direkt, men arv används ofta, särskilt med gränssnitt.
Notera
Du kommer att lära dig om gränssnitt i nästa avsnitt av denna kurs.
Regler för arv
Ärva endast en klass. Java stöder inte multipelt arv. En klass kan bara ha en förälder;
Allt ärvs förutom
private
-variabler och metoder.
Notera
Du kan inte ärva från dig själv!
Tidigare nämnde jag att en underklass skulle ha tillgång till alla variabler och metoder i föräldern. Men det är inte helt sant.
I verkligheten är alla metoder och variabler markerade med private
-modifieraren inte tillgängliga för underklassen.
Skriv över föräldraklassens metod.
Låt oss föreställa oss att vi ärver en klass, men det finns vissa delar av den ärvda koden som vi inte gillar. Anta att vi vill att en specifik metod ska fungera annorlunda än i föräldraklassen.
För att skriva över en metod från föräldraklassen skriver vi @Override
ovanför den:
Parrot.java
@Override public void eat() { System.out.println("The parrot is eating"); }
I koden ovan har vi överskuggat metoden från föräldraklassen, och nu när denna metod anropas från barnklassen kommer den överskuggade metoden att köras!
Förhindra arv.
Om du inte vill att någon ska ärva din klass, använd final
-modifikatorn före den.
Till exempel:
Bird.java
Parrot.java
public final class Bird { // fields and methods }
På detta sätt, genom att använda nyckelordet final
, har vi förbjudit arv av klassen Bird
.
Detta är bara de grundläggande reglerna och egenskaperna för arv. Det är ett omfattande ämne som du kommer att använda mycket ofta. Under kursens gång kommer du att bekanta dig med andra aspekter av arv och använda dem oftare.
1. Varför behöver vi arv i Java?
2. Hur många klasser kan vi ärva från samtidigt?
3. Hur kan vi förhindra arv i Java?
Tack för dina kommentarer!