Skip to content

5.3 Vererbung

Im Folgenden werden wir an einer Erweiterung des Programms Bälle fangen arbeiten.

Zusätzlich zu den beiden Klassen Anwendung und Ball wird noch eine Klasse SpeedBall hinzugefügt. Nachfolgend ist der komplette Quelltext der Klasse SpeedBall dargestellt.

    import SGE.*;

public class SpeedBall extends Ball
{
    public SpeedBall(SGLeinwand pLeinwand)
    {
        super(pLeinwand);
    }

    @Override
    public void bewege()
    {
        vX = vX * 1.001;
        vY = vY * 1.001;
        super.bewege();
    }
}
   
            
                    
        
Baelle fangen

Aufgaben

Um zu verstehen, wie die Klasse SpeedBall funktioniert, bearbeite die folgenden Aufgaben:

  1. Markiere alles, was für dich neu aussieht, und was dir unklar ist. Kennst du die Übersetzung der neuen englischen (Schlüssel-)wörter?
  2. Was fehlt alles, wenn du an die Programmierung der Klasse Ball denkst?
  3. Versuche zu beschreiben, was in der Methode bewege der Klasse SpeedBall

Die Vererbungs-Beziehung zwischen den Klassen SpeedBall und Ball bedeutet:

Ein Objekt aus der Klasse SpeedBall ist auch ein Objekt der Klasse Ball. Es „erbt“ damit alle Attribute und Methoden aus der Klasse Ball. Die Klasse Ball heißt bei dieser Beziehung Oberklasse oder Superklasse und die Klasse SpeedBall Unterklasse. Man sagt auch: Eine Unterklasse wird von der Oberklasse abgeleitet. In der Unterklasse können Methoden der Oberklasse überschrieben werden.

  1. Wende diese Information noch einmal auf Aufgabe 3 an.

Öffne den Prototypen zum Speedball-Projekt. Dort ist die Klasse Speedball wie oben implementiert. Beim Übersetzen wird aber ein Fehler angezeigt.

  1. Lies die folgenden Informationen zu den Sichtbarkeitsmodifikatoren.

Sichtbarkeitsmodifikatoren

Jedes Attribut und jede Methode hat automatisch einen Sichtbarkeitsmodifikator. Dadurch wird festgelegt, aus welchen Klassen auf das Attribut (die Methode) zugegriffen werden kann.

private (in UML: „-“ ): Nur die Klasse selber darf das Attribut (die Methode) verwenden

protected (in UML: „#“): Die Klasse und ihre Unterklassen dürfen das Attribut (die Methode) verwenden.

public (in UML: „+“): Alle Klassen dürfen das Attribut (die Methode) verwenden.

Prinzipiell gilt: In der Objektorientierten Programmierung (OOP) versucht man für jedes Attribut und jede Methode die Sichtbarkeit möglichst stark einzuschränken (Geheimnisprinzip). Sind z.B. alle Attribute einer Klasse auf private gesetzt, dann kann niemand als das Objekt aus dieser Klasse selber auf seine Attribute zugreifen. Dadurch schützt sich das Objekt vor unbefugtem Ändern seiner Attribute.

Die Methoden, die eine Klasse als Dienste nach außen bereitstellt werden auf public gesetzt. Nur sie sind für andere Objekte als Methoden der Klasse sichtbar.

Aufgaben

  1. Verändere die Sichtbarkeit der Attribute vX und vY so, dass in der Klasse SpeedBall darauf zugegriffen werden kann.
  2. Lass die Anwendung laufen. Du wirst feststellen, dass keiner der Bälle beschleunigt. Im Konstruktor der Anwendung werden nur zwei Objekte der Klasse Ball erzeugt. Ändere dies so ab, dass der Ball b2 ein Objekt der Klasse SpeedBall ist. Danach sollte eine der Kugeln beschleunigen.
  3. Probiere aus: Es ist egal, ob man in der Anwendung das Attribut b2 als Objekt vom Datentyp Ball oder SpeedBall deklariert. Versuche das zu erklären.
  4. Umgekehrt: Deklariere b2 als SpeedBall und erzeuge ein Objekt der Klasse Ball. Erkläre, warum dabei ein Fehler ausgegeben wird.
  5. Kommentiere in der Methode bewege in der Klasse SpeedBall die Zeile mit dem super-Aufruf aus und führe das Programm aus. Beschreibe, was passiert und erkläre dies.