Vererbung

Aus SibiWiki
Version vom 8. April 2014, 19:08 Uhr von Akaibel (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Allgemeines= ''Der folgende Text ist aus [http://de.wikipedia.org/wiki/Vererbung_(Programmierung) Wikipedia] und gekürzt.''' Vererbung dient dazu, aufbauend …“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Allgemeines

Der folgende Text ist aus Wikipedia und gekürzt.' Vererbung dient dazu, aufbauend auf existierenden Klassen neue zu schaffen. Eine neue Klasse kann dabei eine Erweiterung oder eine Einschränkung der ursprünglichen Klasse sein.

  • Die vererbende Klasse wird meist Superklasse, Basisklasse oder Oberklasse genannt. In diesem Artikel wird immer von Superklasse genannt.
  • Die erbende Klasse wird Subklasse, abgeleitete Klasse oder Unterklasse genannt. In diesem Artikel wird sie immer Subklasse genannt.
  • Den Vorgang des Erbens nennt man Ableitung.
  • In UML wird eine Vererbungsbeziehung durch einen Pfeil mit einer dreieckigen (leeren!) Spitze dargestellt, der von der abgeleiteten Klasse zur Basisklasse zeigt.
  • Der Subklasse stehen alle public-Methoden und public-Attribute der Superklasse zur Verfügung.
  • Geerbte Attribute und Methoden werden in der Darstellung der Subklasse nicht wiederholt. Das gilt sowohl für das UML-Diagramm als auch für den Java-Quelltext.
  • Abgeleitete Klasse und Basisklasse stehen typischerweise in einer "ist-ein"-Beziehung zueinander.

Beispiel

Klassendiagramm
  • Fachbuch und Hoerbuch erben von Buch.
  • Buch ist die Superklasse
  • Fachbuch und Hoerbuch sind die Subklassen.
  • Fachbuch und Hoerbuch verfügen über alle public-Methoden von Buch.

Implementierung

public class Buch{
  private String titel;
  private String autor;
  
  public Buch(String pAutor, String pTitel){
     autor = pAutor;
     titel = pTitel;
  }
  
  public String gibTitel(){
     return titel;
  }
  
  public String gibAutor(){
     return autor;
  }
  
  /**
   * info ist eine polymorphe Methode!
   */
  public String info() {
     String ergebnis = "Autor: "+autor+"; Titel: "+titel;
     return ergebnis;
  }
}
public class Fachbuch extends Buch{
  private String kategorie;
  
  public Fachbuch(String pAutor, String pTitel, String pKategorie){
     // den Konstruktor von Buch aufrufen!
     super(pAutor, pTitel);
     kategorie = pKategorie;
  }
  
  public String gibKategorie(){
     return kategorie;
  }
  
  /**
   * info() ist eine polymorphe Methode
   */
  public String info(){
     // erst mal die info der Klasse Buch abfragen!
     String ergebnis = super.info();
     ergebnis += "; Kategorie: "+kategorie;
     return ergebnis;
  }
}
public class Hoerbuch extends Buch{
  private double dauer;
  private String sprecher;
  
  public Hoerbuch(String pAutor, String pTitel, double pDauer, String pSprecher){
     // den Konstruktor von Buch aufrufen!
     super(pAutor, pTitel);
     dauer = pDauer;
     sprecher = pSprecher;
  }
  
  public double gibDauer(){
     return dauer;
  }
  
  public String gibSprecher(){
     return sprecher;
  }
  
  /**
   * info() ist eine polymorphe Methode.
   */
  public String info(){
     // erst mal die info der Klasse Buch abfragen!
     String ergebnis = super.info();
     ergebnis += "; Dauer: "+dauer+" Sprecher: "+sprecher;
     return ergebnis;
  }
}

Erläuterungen:

  • Das Schlüsselwort für Vererbung ist extends; damit wird eine Klasse zur Subklasse.
  • Im Konstruktor der Subklassen muss zuerst mit dem Schlüsselwort super(...) der Konstruktor der Superklasse aufgerufen werden.
    • D.h. zum Beispiel für Fachbuch: Um ein Objekt vom Typ Fachbuch zu erzeugen, muss erst der Konstruktor von Buch aufgerufen werden; das ist auch inhaltlich wichtig, denn nur so können titel und autor richtig eingetragen werden.
  • Mit super.info() greifen die Subklassen auf die Methode info() der Superklasse zu. Das nennt man Polymorphie.