10.2 Kapselung und Vererbung

Aufgabe

Aufgabe 10-3: Welche Implementierung der Methode blinken() ist korrekt?

  1. Worin unterscheiden sich die beiden Implementierungsversuche der Methode blinken() (vgl. Abb. 10-6a und 10-6b)?
  2. Lesen Sie den Abschnitt „Merke: Kapselung und Vererbung“. Welcher der beiden Implementierungsversuche ist korrekt und welcher fehlerhaft? Begründen Sie Ihre Meinung.
Lösung
Lösung
  1. Der erste Versuch die Methode blinken() zu implementieren versucht direkt auf das Attribut farbe zuzugreifen und diesem einen Wert zuzuweisen. Der zweite Versuch greift nicht direkt auf das Attribut farbe zu, sondern nutzt hierfür die geerbte öffentliche Methode setFarbe(pFarbe: String).
  2. Die Klasse RoboterErweitert ist eine Unterklasse der Klasse Roboter. Sie besitzt daher auch deren Attribut farbe. Da das Attribut in der Klasse Roboter als privat deklariert worden ist, darf auch eine Unterklasse nicht direkt darauf zugreifen. Der erste Implementierungsversuch ist daher nicht korrekt.
    Der zweite Implementierungsversuch nutzt stattdessen die von der Klasse Roboter geerbete Methode setFarbe(pFarbe: String). Diese Methode ist in der Klasse Roboter als öffentlich deklariert worden. Wie jede Klasse darf die Unterklasse daher darauf zugreifen.
JAVA
public class RoboterErweitert extends Roboter {
     
     public void blinken() {
         this.farbe = "rot";
         this.farbe = "gelb";
         this.farbe = "blau";
         this.farbe = "weiss";
     }
}
Abb. 10-6a: 1. Versuch der Implementierung der Methode blinken()
JAVA
public class RoboterErweitert extends Roboter {
     
     public void blinken() {
         this.setFarbe("rot");
         this.setFarbe("gelb");
         this.setFarbe("blau");
         this.setFarbe("weiss");
     }
}
Abb. 10-6b: 2. Versuch der Implementierung der Methode blinken()

Das Prinzip der Kapselung besagt, dass der direkte Zugriff auf private Attribute und private Methoden nur innerhalb der Klasse möglich ist, in der diese deklariert sind. Diese strikte Regel wird auch bei einer Vererbung nicht außer Kraft gesetzt. Das heißt, eine Unterklasse besitzt zwar auch die privaten Attribute und privaten Methoden ihrer Oberklasse, allerdings darf sie darauf nicht direkt zugreifen.

Bei öffentlichen Methoden, die die Unterklasse von ihrer Oberklasse erbt, gibt es natürlich keine Zugriffs­beschränkung. Verfügt die Oberklasse über öffentliche Methoden, die einen kontrollierten Zugriff auf ihre privaten Attribute oder privaten Methoden erlauben (zum Beispiel set- und get-Methoden), so können diese auch aus der Unterklasse aufgerufen werden.

Merke: Kapselung und Vererbung
Aufgabe

Aufgabe 10-4: robi.beschleunige()

Erstellen Sie in der Klasse RoboterErweitert die öffentliche Methode beschleunige(). Sofern der Roboter noch nicht seine Höchstgeschwindigkeit von 4 erreicht hat, soll der Aufruf dieser Methode seine Geschwindigkeit um 1 erhöhen.

Lösung
Lösung
JAVA
public class RoboterErweitert extends Roboter {
     
     public void beschleunige() {
         int aktuelleGeschwindigkeit = this.getGeschwindigkeit();
         
         if(aktuelleGeschwindigkeit<4) {
             this.setGeschwindigkeit(aktuelleGeschwindigkeit+1);
         }
     }
}
Abb. 10-7: Implementierung der Methode beschleunige()