Oberklasse und Unterklasse
- Idee:was alle Fahrzeuge haben (
name,tempo,beschleunigen(…)), steht nur einmal in der OberklasseFahrzeug. - extends:
public class Auto extends Fahrzeug— die UnterklasseAutoerbt alle Attribute und Methoden und ergänzt eigene. - „ist ein“-Test:ein Auto ist ein Fahrzeug → Vererbung passt. Ein Auto hat einen Motor → keine Vererbung, sondern ein Attribut.
- Diagramm:Pfeil mit hohler Dreiecksspitze von der Unterklasse zur Oberklasse.
- super(…):der Konstruktor der Unterklasse ruft in seiner ersten Zeile den Konstruktor der Oberklasse auf.
- Zugriff:private bleibt privat:
Autoerbtname, darf aber nur übergetName()darauf zugreifen.
Fahrzeug — die hohle Spitze zeigt zur Oberklasse.Herleitung:
Auto ──▷ FahrzeugAuto zu Fahrzeug.public class Auto extends Fahrzeug {extends.private int sitze;Fahrzeug noch nicht hat, kommt dazu — name und tempo sind geerbt.public Auto(String name, int sitze) { super(name); this.sitze = sitze; }super(name) reicht den Namen an Fahrzeug weiter, danach setzt Auto sein eigenes Attribut.Methoden überschreiben
- Überschreiben:die Unterklasse schreibt eine geerbte Methode neu — gleicher Name, gleiche Parameter, gleicher Rückgabetyp.
- @Override:steht über der neuen Methode. Vertippt (
beschreibnug), meldet der Compilermethod does not override or implement a method from a supertype. - Welche läuft?immer die Methode der Klasse, mit der das Objekt erzeugt wurde: bei
new Auto(…)die ausAuto. - super.methode():ruft die Version der Oberklasse auf — so ergänzt
Fahrraddie alte Beschreibung, statt sie neu zu schreiben. - Nur nach unten:ein
Autokann nichtklingeln()— das hat nurFahrrad:cannot find symbol.
Schiebe die Unterklasse wie eine Folie über die Oberklasse — am Griff, mit dem Regler oder mit den Pfeiltasten. Dann siehst du, was ein Objekt wirklich kann. Rufe Methoden auf: Gelb leuchtet die Implementierung, die tatsächlich läuft.
Halte fest: Ein Objekt der Unterklasse hat alles aus der Oberklasse (blau) plus das Neue (grün). Bei überschriebenen Methoden (orange) läuft die Version der Unterklasse — außer sie ruft ausdrücklich super.methode() auf.
Vererbung: class Auto extends Fahrzeug — Auto erbt alle Attribute und Methoden von Fahrzeug, ergänzt eigene und kann Methoden mit @Override überschreiben. Es läuft die Methode der Klasse des Objekts.
Allgemeine Hinweise
super zuerst
super(name); muss die erste Zeile im Konstruktor sein, sonst: call to super must be first statement in constructor. Fehlt es ganz, passt kein Konstruktor von Fahrzeug.
Geerbt heißt nicht sichtbar
Schreibt Auto direkt name, meldet der Compiler name has private access in Fahrzeug. Nimm getName().
Erst testen: „ist ein“?
Passt der Satz „Ein … ist ein …“ nicht, ist Vererbung falsch. Ein Fahrrad ist kein Reifen — es hat zwei davon.
