Arv er et centralt begreb i objektorienteret programmering (OOP) og betragtes ofte som en af byggestenene til effektivitet. I denne tutorial vil du uddybe din forståelse af arv i Java. Du vil lære, hvordan du håndterer adgangsmodifikatorer, bruger konstruktører, og hvilken rolle indkapsling spiller i arv.
Vigtigste indsigter
- Arv muliggør arv af egenskaber og metoder fra en klasse.
- Adgangsmodifikatoren private begrænser adgangen til variabler eller metoder, mens protected tillader udvidet adgang inden for klasser, der arver fra den oprindelige klasse.
- Konstruktører skal kaldes i underklassen for korrekt at instantiere objekter.
- Interface-metoder kan generaliseres, når man har flere specifikke klasser.
Trin-for-trin vejledning
Adgangsmodifikatorer: protected vs. private
Når du i en klasse som Køretøj deklærer en variabel (f.eks. Farve) som protected, kan du bruge denne variabel direkte i en afledt klasse (f.eks. Bil). Men hvis du deklærer variablen som private, kan du ikke få direkte adgang til den i underklassen.

Det betyder konkret, at adgang til private variabler kun kan ske via setter og getter.
Eksemplet viser, at vi skal bruge setFarve og getFarve for at få adgang til den private variabel farve.

Når variablen er deklareret som protected, kan du nemt få adgang til den inden for Bil-klassen og ændre værdien.
Brug af konstruktører i arv
Ved definitionen af en underklasse skal du sikre dig, at konstruktøren for overklassen kaldes korrekt.

Dette sikrer, at farven bliver korrekt initialiseret, når der oprettes et Bil-objekt.

Vær opmærksom på, at du i underklassen definerer en konstruktør, der passende videresender parametrerne til overklassen.
Arv og metodeopkald
To klasser, Køretøj og Bil, giver dig mulighed for at bruge fælles variabler og metoder. Når du definerer en metode i Køretøj, kan du også bruge denne metode i Bil uden at skrive den igen.

Her kaldes metoden køretøjFarveUdskrive og udskriver farveværdien, som leveres af getFarve-metoden.
Begrænsninger ved adgang til metoder
Når du forsøger at kalde en metode i en underklasse, der ikke er tilgængelig for klassen, får du en kompilationsfejl. I vores eksempel skal et Køretøj-objekt overleveres for at kalde metoden getFarve.

Det betyder i praksis, at du skal sikre dig, at metoden passer til din datatype, før du kalder den. Du kan derfor overlevere en cykel, en bil eller begge dele til en metode, der kun forventer Køretøj-objekter.
Eksempel på opkald af instansmetoder i statiske kontekster
Bemærk, at i statiske metoder (static) kan this-nøgleordet ikke bruges, da det ikke refererer til en specifik instans. I sådanne tilfælde bør du muligvis bruge en anden metode eller omstrukturere logikken.

Ved dette opkald vises farven for meinBil-objektet korrekt.
Resumé - Arv i Java: En guide for nybegyndere
Arv er et vigtigt koncept i programmering med Java, der hjælper dig med at modulere og genbruge koden. I denne tutorial har du lært om grundlæggende adgangsmodifikatorer, konstruktører og metodeopkald i forhold til arv.
Ofte stillede spørgsmål
Hvordan kan jeg få adgang til private variabler i underklassen?Du kan ikke få direkte adgang til private variabler i underklassen. Brug getter- og setter-metoder.
Hvad er forskellen mellem protected og private?protected tillader adgang i underklassen og i samme pakke, mens private kun er tilgængelig inden for den egen klasse.
Skal jeg definere konstruktører i underklassen?Ja, hvis du har tilpasset konstruktøren i overklassen, skal du også definere konstruktørerne i underklassen tilsvarende.
Kan jeg frit overskrive metoder fra overklasser i underklasser?Ja, du kan overskrive metoder, der ikke er markeret med final eller static, i underklassen for at implementere specifik adfærd.