Vecka 6: Objektorienterad programmering (Del 2)
Arv och polymorfism
Abstrakta klasser och interfaces
Vecka 6 i en grundkurs i Java fokuserar ofta på fördjupad förståelse av objektorienterad programmering, med särskilt fokus på koncept som arv, polymorfism, abstrakta klasser och interfaces. Dessa koncept är centrala byggstenar i objektorienterad design och programmering, och förståelsen för dem är avgörande för att skapa välstrukturerad, återanvändbar och underhållbar kod. Låt oss utforska dessa koncept mer detaljerat.
Arv
Arv är en av de grundläggande principerna i objektorienterad programmering. Det möjliggör för en klass att ärva fält och metoder från en annan klass. I Java används nyckelordet extends
för att etablera ett arvsförhållande mellan två klasser. Arv främjar kodåteranvändning och skapar en hierarkisk klassificering.
Tänk dig en grundläggande klass kallad Fordon
som representerar alla typer av fordon. Den kan ha egenskaper som hastighet
och färg
, samt en metod för att visaInfo()
som skriver ut fordonets egenskaper.
class Fordon {
protected int hastighet;
protected String färg;
public Fordon(int hastighet, String färg) {
this.hastighet = hastighet;
this.färg = färg;
}
public void visaInfo() {
System.out.println("Hastighet: " + hastighet + " Färg: " + färg);
}
}
En Bil
klass kan ärva från Fordon
för att använda dess egenskaper och metoder, och även lägga till egna specifika egenskaper.
class Bil extends Fordon {
private int antalDörrar;
public Bil(int hastighet, String färg, int antalDörrar) {
super(hastighet, färg);
this.antalDörrar = antalDörrar;
}
@Override
public void visaInfo() {
super.visaInfo();
System.out.println("Antal dörrar: " + antalDörrar);
}
}
Polymorfism
Polymorfism är konceptet att en metod kan utföra olika funktioner baserat på objektet som den tillhör. Detta uppnås genom överlagring (method overloading) och överskridning (method overriding).
Överskridning innebär att en underklass ger en specifik implementation av en metod som är ärvt från en överklass. I exemplet ovan överskrevs visaInfo()
-metoden i Bil
klassen för att visa ytterligare information.
Abstrakta klasser
En abstrakt klass är en klass som inte kan instansieras. Den används som en bas för andra klasser. Abstrakta klasser kan innehålla både abstrakta metoder (utan implementation) och konkreta metoder (med implementation). Abstrakta metoder måste överskridas av subklasserna.
abstract class Däggdjur {
public abstract void göraLjud();
}
class Hund extends Däggdjur {
@Override
public void göraLjud() {
System.out.println("Vov!");
}
}
Interfaces
Ett interface i Java är en referenstyp som kan innehålla konstanter och deklarationer av abstrakta metoder. Genom att implementera ett interface kan en klass förbinda sig till att förse implementationer av de metoder som interfacet deklarerar. Ett interface används för att specificera ett set av metoder som en klass måste implementera.
interface Vattenlevande {
void simma();
}
class Fisk implements Vattenlevande {
@Override
public void simma() {
System.out.println("Fisken simmar");
}
}
Genom att använda arv och polymorfism kan vi skapa ett flexibelt och återanvändbart kodsystem. Abstrakta klasser och interfaces tillåter oss att definiera kontrakt för vad ett objekt kan göra, utan att specificera hur det