Vererbung

  • weiter zu Interface
  • zurück zum Inhaltsverzeichnis

  • Klassen können von anderen Klassen abgeleitet werden. Die abgeleitete Klasse erbt von ihrer Superklasse alle Eigenschaften und Methoden.

    Die Erzeugung einer abgeleiteten Klasse erfolgt mit dem Schlüsselwort extends.

    Es ergibt sich so eine Hierarchie von Klassen. Je weiter oben eine Klasse in der Hierarchie steht, umso allgemeiner sollte sie sein, nach unten werden die Klassen inhaltlich immer stärker spezialisiert.

    Die Vererbung stellt eine Möglichkeit dar, einmal geschriebene Klassen wieder zu verwenden und in der abgeleiteten Klasse nach Bedarf zu modifizieren, anstatt eine ganz neue Klasse schreiben zu müssen. Inhaltlich gesehen sollte die Vererbung dem Programmierer helfen, sein Programm deutlich zu strukturieren: Vom Allgemeinen zum Besonderen.

    Unabhängig davon, ob eine Klasse durch Vererbung erzeugt wurde, kann man von ihr Instanzen bilden durch Aufruf des Konstruktors.

    Im folgenden wird eine Hierarchie von Klassen erzeugt:

    Klasse Fahrzeug

    Die Klasse Fahrzeug dient als Superklasse für eine Klasse Pkw, die alle Eigenschaften und Methoden von Fahrzeug erbt. Die Konstruktoren der abgeleiteten Klasse rufen als erstes den Konstruktor ihrer Superklasse auf mit dem Schlüsselwort super()

    Klasse Pkw

    Ausserdem kann eine abgeleitete Klasse noch eigene Definitionen von Eigenschaften und Methoden enthalten, siehe Datei Klasse Pkw1

    Von der Klasse Pkw wird eine Klasse Sportwagen abgeleitet. Sie erbt von Pkw.class und damit indirekt von Fahrzeug.class. Bei Bedarf werden ererbte Methoden überschrieben, das heisst, die Definition der ererbten Methode wird neu geschrieben, in diesem Beispiel die Methode beschleunigen().

    Klasse Sportwagen



    Package und Verzeichnis

    Da diese 4 Dateien inhaltlich zusammengehören, wurden sie in ein Verzeichnis mit dem frei erfundenen Namen vererbung abgepackt. Der java-Befehl

     package vererbung;
    reflektiert diese Verzeichnis-Struktur.



    Automatische Erstellung der Dokumentation

    Die Dokumentation wurde automatisch erstellt mit dem JDK-Befehl
    C:>javadoc -link http://java.sun.com/products/jdk/1.2/docs/api -package vererbung

    nach oben

    Quell-Codes

    Klasse Fahrzeug
    zurück
    package vererbung;
    public class Fahrzeug{
    
            protected int geschwindigkeit;
            protected String eigentuemer;
    
    public Fahrzeug (){}
    
    public Fahrzeug( String e ){
            eigentuemer = e;
    }
    public Fahrzeug( int v ){
            geschwindigkeit = v;
    }
    public Fahrzeug( int v, String e ){
            geschwindigkeit = v;
            eigentuemer = e;
    }
    
    public int getGeschwindigkeit(){
            return geschwindigkeit;
    }
    public void setGeschwindigkeit( int v ){
            geschwindigkeit = v;
    }
    
    public String getEigentuemer(){
            return eigentuemer;
    }
    public void setEigentuemer( String e ){
            eigentuemer = e;
    }
    public double beschleunigen(){
            geschwindigkeit = geschwindigkeit + 5;
            return geschwindigkeit;
    }
    
    static public void main( String args[]){
            Fahrzeug fahrzeug1 = new Fahrzeug(130,"meier");
            System.out.println( "F1: "+fahrzeug1.getGeschwindigkeit());
            fahrzeug1.beschleunigen();
            System.out.println( "F1: "+fahrzeug1.getGeschwindigkeit());
    }
    }
    
    
    Klasse Pkw
    zurück
    package vererbung;
    public class Pkw extends Fahrzeug
    {
    
    public Pkw(){
            super();
    }
    public Pkw( String e ){
            super( e );
    }
    public Pkw( int v ){
            super( v );
    }
    public Pkw( int v, String e ){
            super( v, e );
    }
    
    static public void main( String args[]){
            Pkw pkw1 = new Pkw(123,"Meier");
            System.out.println( "P1: "+pkw1.getGeschwindigkeit());
            pkw1.beschleunigen();
            System.out.println( pkw1.eigentuemer+ " "+ pkw1.getGeschwindigkeit());
    }
    }
    
    Klasse Pkw1
    zurück
    package vererbung;
    public class Pkw1 extends Fahrzeug
    {
    int hubraum;
    
    public Pkw1(){
            super();
    }
    public Pkw1( String e ){
            super( e );
    }
    public Pkw1( int v ){
            super( v );
    }
    public Pkw1( int v, String e ){
            super( v, e );
    }
    public Pkw1( int v, String e, int h ){
            super( v, e );
            setHubraum( h );
    }
    public void setHubraum( int h)
    {
             hubraum = h;
    }
    public int getHubraum()
    {
             return hubraum;
    }
    
    static public void main( String args[]){
            Pkw1 pkw4 = new Pkw1(123,"Meier", 4711 );
            System.out.println( "P4: "+pkw4.getGeschwindigkeit());
            pkw4.beschleunigen();
            System.out.println( pkw4.eigentuemer+ " "+ pkw4.getGeschwindigkeit());
            System.out.println( "Hubraum: "+ pkw4.getHubraum());
    }
    }
    
    

    Klasse Sportwagen
    zurück
    package vererbung;
    public class Sportwagen extends Pkw
    {
    public Sportwagen(){
            super();
    }
    public Sportwagen( String e ){
            super( e );
    }
    public Sportwagen( int v ){
            super( v );
    }
    public Sportwagen( int v, String e ){
            super( v, e );
    }
    
    public double beschleunigen(){
            geschwindigkeit = geschwindigkeit + 50;
            return geschwindigkeit;
    }
    static public void main( String args[]){
            Sportwagen s1 = new Sportwagen ( 220, "Schumi" );
            System.out.println( "Sportwagen "+s1.getGeschwindigkeit());
            s1.beschleunigen();
            System.out.println( s1.getEigentuemer()+"  "+s1.getGeschwindigkeit());
    
            Pkw p1 = new Pkw( 123, "Meier" );
            System.out.println( "Pkw "+p1.getGeschwindigkeit());
            p1.beschleunigen();
            System.out.println( p1.getEigentuemer()+" "+p1.getGeschwindigkeit());
    }
    }
    
    
    zurück