Kapitel 21. Avancerede klasser

Dette kapitels afsnit om final på variabler forudsættes af Kapitel 22, Indre klasser.

Forudsætter Kapitel 6, Nedarvning og Kapitel 7, Pakker og ønske om at vide mere om emner som først bliver relevante når man laver større programmer.

21.1. public, protected og private

Det er vigtigt at styre adgangen til at kalde metoder og ændre på variabler, i særdeleshed når programmerne bliver store. Det kan lette overskueligheden meget hvis interne variabler, metoder og klasser er skjult for programmøren.

Adgang styres med nøgleordene public, protected og private. Adgangskontrol ud over public/private bliver først interessant når der er mange klasser og programmet spænder over flere pakker. Se eventuelt kapitlet om pakker.

21.1.1. Variabler og metoder

Variabler og metoder erklæret public er altid tilgængelige, inden og uden for klassen.

Variabler og metoder erklæret protected er tilgængelige for alle klasser inden for samme pakke. Klasser i andre pakker kan kun få adgang, hvis de er nedarvinger.

Skriver man ingenting, er det kun klasser i samme pakke, der har adgang til variablen eller metoden.

Hvis en variabel eller metode er erklæret private, kan den kun benyttes inden for samme klasse (og kan derfor ikke tilsidesættes med nedarvning). Det er det mest restriktive.

Adgangen kan sættes på skemaform:

Tabel 21-1. Adgangsregler

Adgang

public

protected

(ingenting)

private

i samme klasse

ja

ja

ja

ja

klasse i samme pakke

ja

ja

ja

nej

arving i en anden pakke

ja

ja

nej

nej

ej arving og i en anden pakke

ja

nej

nej

nej

Holder man sig inden for samme pakke, er der altså ingen forskel mellem public, protected og ingenting.

21.1.2. Klasser

Klasser kan erklæres public eller ingenting (men ikke protected eller private).

Klasser erklæres normalt public og er tilgængelige fra alle pakker.


public class X
{
  // ...
}

Undlader man public, er klassen kun tilgængelig inden for samme pakke.


class X
{
  // ...
}

Man kan have flere klasser i en fil, men højst en, der er public, og denne klasse skal hedde det samme som filnavnet.