Drucken

Vererbung

Die Vererbung in Java baut auf der Vorstellung auf, dass Eltern ihren Kindern Eigenschaften und Fähigkeiten (Methoden) mitgeben, die aber auch geändert (überschrieben) werden können. Syntaktisch wird die Vererbung mit dem Schlüsselwort extends beschrieben. Eine mit extends abgeleitete Klasse besitzt automatisch alle (nicht privaten) Eigenschaften und Methoden der oberen Klasse (Superklasse). Die folgenden Beispiele sollen den ersten Einblick in diese Programmiertechnik geben.

 Beispiel 1: Im Unterschied zum Beispiel 1 im Abschnitt Komposition, ist hier die Klasse Moire von der Klasse GPanel abgeleitet, d.h. sie ist selbst ein GPanel und erbt alle seine Eigenschaften und Methoden (kein "p." vor der Methode line())

// MoireIs.java

import ch.aplu.util.*;

public class MoireIs extends GPanel
{
  public MoireIs()
  {
    window(010010);
    int i, k;
    for (= 0; i <= 10; i++)
    {
      for (= 0; k <=10; k++)
        line(i, 0, k, 10);
    }
    
    for (= 0; i <= 10; i++)
    {
      for (= 0; k <= 10; k++)
        line(0, i, 10, k);
    }
  }

  public static void main(String[] args)
  {
    new MoireIs();
  }
}

 

 

 

 

 

 

 

 Beispiel 2: Die Klasse MyPanel kann auch als eine Erweiterung der Klasse GPanel aufgefasst werden. MyPanel ist ein GPanel, hat aber zusätzlich die Methoden square(double s), die ein Quadrat mit der Seitenlänge s zeichnet und triangle(double s), die ein gleichseitiges Dreieck zeichnet. So kann die Klassenbibliothek GPanel mit zusätzlichen Methoden und Eigenschaften erweitert werden. Da die Klasse MyPanel vor der Klasse GPanel abgeleitet ist, kann mit mp.circle(0.3) auch die Methode circle() aus der Klasse GPanel aufgerufen werden.

// VererbungEx2.java

import ch.aplu.util.*;

// ----------------- Application class ---------
public class VererbungEx2 
{
  public VererbungEx2()
  {
    MyPanel mp = new MyPanel();
    mp.move(0.50.5);
    mp.square(0.1);
    mp.triangle(0.3);
    mp.circle(0.3);
  }
  
  public static void main(String[] args)
  {
    new VererbungEx2();
  } 
}

// ------------------- class MyPanel --------------------
class MyPanel extends GPanel
{
  // Neue Methode square, existiert nicht im GPanel
  void square(double size)
  {
    rectangle(size, size);
  }
  
  // Neue Methode triangle, zeichnet gleichseitiges Dreick
  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:
Das Programm besteht aus zwei Klassen, Klasse MyPanel, die von der Klasse GPanel abgeleitet wird und der Applikationsklasse Vererbung Ex2, welche die Methode main() enthält und zum Testen der neuen Klasse verwendet wird. Wenn man mit einem lokalen Editor (JCreator, Eclipse...) arabeitet werden solche Klassen in der Regel in zwei separaten Dateien gespeichert. Im Online-Editor müssen die beide Klassen im gleichen Editor-Fenster eingegeben werden damit man beide gleichzeitig zum compilieren auf den Webserver schicken kann. Für eine bessere Übersicht trennen wir die beiden Klassen mit einer gestrichelten Kommentarlinie.