Access-Modifier sind Schlüsselwörter public, protected und private, die vor Deklarationen gesetzt werden, um die Sichtbarkeit (Zugriffsrechte) der Instanzvariablen, Methoden oder Klassen festzulegen.
private | sichtbar nur in eigener Klasse |
public | überall sichtbar |
protected | sichtbar im gleichen Package und in Subklassen |
Fehlt der Modifier, so wird standardmäsig der package Zugriff verwendet.
Es gehört zum guten Programmierstil, die Modifiers bewusst einzusetzen, um den Zugriff so weit wie möglich einzuschränken. Insbesondere werden Instanzvariablen in der Regel als private deklariert.
Im ersten Beispiel wird die Klasse Turtle in der abgeleitete Klasse mit einer weiteren Methoden ergänzt.
|
Die Klassendeklaration von RedTurtle erfolgt üblicherweise in einer eigenen Source-Datei mit dem Namen RedTurtle.java. Da wir im Online-Editor nur eine Datei verwenden können, schreiben wir die Klasse ins gleiche Editorfenster.
// Tu21.java import ch.aplu.turtle.*; import java.awt.Color; public class RedTurtle extends Turtle { public RedTurtle() { setColor(Color.red); setPenColor(Color.red); } public void star(double s) { fillToPoint(getX(),getY()); for (int i = 0; i < 6; i++) { forward(s); right(140); forward(s); left(80); } } } public class Tu21 { public Tu21() { RedTurtle t = new RedTurtle(); t.speed(-1); t.star(50); t.setPos(-100, -100); t.star(30); t.setPos(100,120); t.star(40); t.hideTurtle(); } public static void main(String[] args) { new Tu21(); } } |
public RedTurtle() { setColor(Color.red); setPenColor(Color.red); } |
Im Konstruktor der Klasse RedTurtle() werden Eigenschaften der Klasse Turtle geändert. Die RedTurtle ist rot und zeichnet rot |
public void stern(double s) |
Deklariert eine Methode stern(), die in der Klasse Turtle nicht vorhanden ist |
RedTurtle t = new RedTurtle() t.stern(50) |
In der Applikationsklasse Tu21 wird eine Instanz der Klasse RedTurtle erzeugt. Diese kann die Methoden der Klasse RedTurtle verwenden (sterne zeichnen) |
Im nachfolgenden Beispiel modifizieren wir die Methode setColor() aus der Klasse Turtle. Dazu deklarieren wir die Klasse MyTurtle, in der wir setColor() neu deklarieren. Die modifizierte Methode soll neben der Turtlefarbe gleichzeitig auch die Stiftfarbe setzen. Auf diese Art kann eine bestehende Klassenbibliothek beliebig ergänzt und modifiziert werden. Wir nennen dieses Verfahren Überschreiben einer Methode.
|
public Turtle setColor(Color c) |
Die überschriebene Methode muss denselben Namen, dieselbe Parameterliste und denselben Rückgabetyp besitzen |
super.setColor(c) |
Es wird die Methode setColor() der Superklasse Turtle aufgerufen |
MyTurtle t = new MyTurtle() |
t ist eine Instanz von MyTurtle. Da MyTurtle von Turtle abgeleitet ist, können alle Methoden von Turtle aufgerufen werden |
|
mit Vererbung: | ohne Vererbung: | |
// Tu20.java import ch.aplu.turtle.*; public class Tu20 extends Turtle { public Tu20() { speed(-1); setPos(-20, -80); for (int i = 0; i < 45; i++) { forward(200); right(159.6); } hideTurtle(); } public static void main(String[] args) { new Tu20(); } } |
// Tu20a.java import ch.aplu.turtle.*; public class Tu20a { Turtle joe = new Turtle(); public Tu20a() { joe.speed(-1); joe.setPos(-20, -80); for (int i = 0; i < 45; i++) { joe.forward(200); joe.right(159.6); } joe.hideTurtle(); } public static void main(String[] args) { new Tu20a(); } } |