Koordinatengrafik mit Java
HomeAufgabenDruckenJava-Online

Methoden überschreiben

 Beispiel 3: Die Klasse MyGPanel ist von der Klasse GPanel abgeleitet. Die Methode triangle() zeichnet ein gleichseitiges Dreieck und überschreibt die Methode triangle() der Klasse GPanel, die ein allgemeines Dreieck, dass durch die Koordinaten der Eckpunkte gegeben ist, zeichnet.

Durch das Vorstellen von super kann gleichzeitig auch die Methode triangle() aus der Superklasse GPanel verwendet werden..

// VererbungEx3.java

import ch.aplu.util.*;

public class VererbungEx3 extends MyPanel
{
  public VererbungEx3()
  {
    move(0.50.5);
    square(0.1);
    triangle(0.3);
    super.triangle(0.20.20.80.20.80.8);
  }
  
  public static void main(String[] args)
  {
    new VererbungEx3();
  } 
}

// ------------------- class MyPanel --------------------
class MyPanel extends GPanel
{
  void square(double size)
  {
    rectangle(size, size);
  }
  
  void triangle(double size)
  {
    double x = getPosX();
    double y = getPosY();
    triangle(- Math.sqrt(3)/2 * size, y - size/2,
             x + Math.sqrt(3)/2 * size, y - size/2,
             x, y + size);
  }
}

 

 

 

 

Erklärungen zum Programmcode:

 Beispiel 4: Die Klasse ColorPanel ist von der Klasse GPanel abgeleitet. Sie hat eine zusätzliche Methode fillColor(), diese setzt nur die Füllfarbe auf einen gewünschten Wert, lässt aber die Linienfarbe erhalten. Jede Methode von GPanel, die füllt, muss nun überschrieben werden. Wir zeigen dies am Beispiel fillCircle().

// VererbungEx4.java

import ch.aplu.util.*;
import java.awt.Color;

public class Vererbung
{
  public VererbungEx4()
  {
    ColorPanel cp = new ColorPanel();
    cp.fillColor(Color.yellow);
    cp.color(Color.red);
    cp.move(0.50.5);
    cp.fillCircle(0.2);
    cp.rectangle(0.10.1);
  }
  
  public static void main(String[] args)
  {
    new VererbungEx4();
  } 
}

// ------------------- class ColorPanel --------------------
class ColorPanel extends GPanel
{
  private Color fillColor;  // neue Eigenschaft

  public void fillColor(Color fillColor)
  {
    this.fillColor = fillColor; // speichert den Parameterwert fillcolor
                                // in die Instanzvariable fillColor
  }

  // Ueberschreibt GPanel's fillCircle()
  public void fillCircle(double r)
  {
    Color oldColor = fillColor; // alte Farbe speichern
    super.fillCircle(r);
    color(oldColor);            // alte Farbe wieder herstellen
    circle(r);
  }
}

 

 

 

 

 

Erklärungen zum Programmcode:

In der Methode fillCircle() wird zuerst die neue Linen- und Füllfarbe gesetzt und die alte gespeichert. Nachfolgend wird der gefüllte Kreis mit der neuen Farbe gezeichnet. Anschliessend wird der Umriss mit der alten Farbe nachgezeichnet.

Das Vorstellen von super garantiert, dass die entsprechende Methode in der Basisklasse (GPanel) aufgerufen wird. Vergisst man super, so ergibt sich ein endloser rekursiver Aufruf!