Lernpfad:Objektorientierte Programmierung mit Java/Vererbung: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Jneug (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Methoden überladen == Beim Überschreiben bekommen abgeleitete Klassen eine eigene Version mindestens einer Methode der Basisklasse. <syntaxhighlight la…“) |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 39: | Zeile 39: | ||
unbekannt.sagWas(); | unbekannt.sagWas(); | ||
} | } | ||
} | |||
</syntaxhighlight> | |||
=== Arbeitsauftrag === | |||
# Lies den [http://openbook.rheinwerk-verlag.de/javainsel/02_007.html#u2.7.10 "Abschnitt 6.4.1: Methoden in Unterklassen mit neuem Verhalten ausstatten"] im Onlinebuch "Java ist auch eine Insel" bis zur Überschrift "Die Annotation @Override". | |||
# Erstellt ein kleines Beispielprojekt, an dem das Konzept "Überschreiben" erklärt werden kann. | |||
== <code>super</code> und <code>this</code> == | |||
Wird eine Methode von einer Unterklasse überschrieben, möchte man dennoch manchmal explizit die überschriebene Methode der Oberklasse aufrufen. Für diese Fälle gibt es das bekannte Schlüsselwort <code>super</code>. Es bezieht sich immer auf die Oberklasse der aktuellen Klasse. Um explizit die aktuelle Klasse zu referenzieren, kann das Schlüsselwort <code>this</code> benutzt werden. | |||
<syntaxhighlight lang="java"> | |||
class Tier { | |||
// Das Attribut ist private und von der Unterklasse nicht nutzbar. | |||
private String name; | |||
public Tier( String pName ) { | |||
this.name = pName; | |||
} | |||
public void ausgabe() { | |||
System.out.println( "Mein Name ist " + this.name ); | |||
} | |||
} | |||
class Hund extends Tier { | |||
private String rasse; | |||
public Hund( String pName, String pRasse ) { | |||
super(pName); | |||
this.rasse = pRasse; | |||
} | |||
// Will die Ausgabe auch den Namen ausgeben (der in der Oberklasse als private markiert ist), | |||
// muss die Methode "ausgabe()" der Oberklasse explizit aufgerufen werden. | |||
public void ausgabe() { | |||
System.out.println( "Ich bin ein " + this.rasse ); | |||
super.ausgabe(); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Version vom 12. Juni 2018, 21:58 Uhr
Methoden überladen
Beim Überschreiben bekommen abgeleitete Klassen eine eigene Version mindestens einer Methode der Basisklasse.
class Tier {
public void sagWas() {
System.out.println("- Stille -");
}
}
class Biene extends Tier {
public void sagWas() {
System.out.println("Summ, Summ, Summ!");
}
}
class Frosch extends Tier {
public void sagWas() {
System.out.println("Quak! Quak!");
}
}
public class Zoo {
public static void main(String[] args) {
Tier t = new Tier();
Frosch f = new Frosch();
Biene b = new Biene();
System.out.println( "Ein Tier sagt: " + t.sagWas() );
System.out.println( "Ein Frosch sagt: " + f.sagWas() );
System.out.println( "Eine Biene sagt: " + b.sagWas() );
Tier unbekannt = new Forsch();
// Was sage ich?
unbekannt.sagWas();
}
}
Arbeitsauftrag
- Lies den "Abschnitt 6.4.1: Methoden in Unterklassen mit neuem Verhalten ausstatten" im Onlinebuch "Java ist auch eine Insel" bis zur Überschrift "Die Annotation @Override".
- Erstellt ein kleines Beispielprojekt, an dem das Konzept "Überschreiben" erklärt werden kann.
super und this
Wird eine Methode von einer Unterklasse überschrieben, möchte man dennoch manchmal explizit die überschriebene Methode der Oberklasse aufrufen. Für diese Fälle gibt es das bekannte Schlüsselwort super. Es bezieht sich immer auf die Oberklasse der aktuellen Klasse. Um explizit die aktuelle Klasse zu referenzieren, kann das Schlüsselwort this benutzt werden.
class Tier {
// Das Attribut ist private und von der Unterklasse nicht nutzbar.
private String name;
public Tier( String pName ) {
this.name = pName;
}
public void ausgabe() {
System.out.println( "Mein Name ist " + this.name );
}
}
class Hund extends Tier {
private String rasse;
public Hund( String pName, String pRasse ) {
super(pName);
this.rasse = pRasse;
}
// Will die Ausgabe auch den Namen ausgeben (der in der Oberklasse als private markiert ist),
// muss die Methode "ausgabe()" der Oberklasse explizit aufgerufen werden.
public void ausgabe() {
System.out.println( "Ich bin ein " + this.rasse );
super.ausgabe();
}
}