Vererbung
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 …“)
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 undpublic
-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
Fachbuch
undHoerbuch
erben vonBuch
.Buch
ist die SuperklasseFachbuch
undHoerbuch
sind die Subklassen.Fachbuch
undHoerbuch
verfügen über allepublic
-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 vonBuch
aufgerufen werden; das ist auch inhaltlich wichtig, denn nur so könnentitel
undautor
richtig eingetragen werden.
- D.h. zum Beispiel für
- Mit
super.info()
greifen die Subklassen auf die Methodeinfo()
der Superklasse zu. Das nennt man Polymorphie.