Vererbung Überschriebene toString-Methode aufrufen

Hallo und einen schönen guten Tag 🙂,

ich hätte da mal eine Anfängerfrage zum Thema Vererbung:

Angenommen ich habe in einer eigenen Klasse die Methode toString überschrieben und möchte zusätzlich aber auch noch die ursprüngliche Methode aus der Objekt-Klasse verwenden. Wäre dies möglich? Und wenn ja, wie? Ich habe schon mit dem Schlüsselwort super experimentiert, allerdings ohne Erfolg.
Hier mal etwas Code zur Veranschaulichung:

Java:
public class Test {
	public static String text = "HIER";

	public String toString()
	{
		return "Achtung: " + text;
	}
	
	
	public static void main(String[] args) {
		System.out.println(text);		
	}
}
Funktioniert natürlich ganz wunderprächtig. Nun möchte ich aber in der main-Methode eine 2. Zeile ausgeben und dabei die ursprüngliche Methode verwenden.
Im Voraus vielen Dank für eure Hilfe und viele Grüße!
 
Java:
public String toString() {
    return super.toString() + " / Achtung: " + text;
}
 
Zuletzt bearbeitet:
von außen kann man das nicht erreichen, die Überschreibung ist wasserdicht,
sonst wären vielleicht auch Sicherheitsklassen recht hinfällig

die Klasse selber kann noch aktiv getSuperXY() mit super-Aufruf zum Umbiegen anbieten,

ansonsten ist es eine Variante, in jeder Ebene die Methode anders zu benennen

Java:
class A 
  public String getDescriptionA()
  public String toString() { return getDescriptionA() }

class B
  public String getDescriptionB()
  public String toString() { return getDescriptionB() }
usw.,

die Methoden wie getDescriptionA() sind dann normal zugreifbar
 
Gibt es keine Möglichkeit beide zu benutzen??
Wenn du eine Methode überschreibst, gibt es keine Möglichkeit, das Verhalten der überschriebenen Methode von außen wieder herzustellen. Die Variante mit super.methode() geht nur in den Subklassen. Die einzige Möglichkeit wäre eine extra Methode. Ungefähr so:
Java:
// In einer Klasse, die direkte Subklasse von Object ist

// Die überschriebene Methode
public String toString() {
   return "überschrieben";
}

// eine weitere Methode, die in diesem Fall
// Object.toString() zur Verfügung stellt.
public String objToString() {
  return super.toString()
}
Ob das sinnvoll ist, steht auf einem anderen Blatt
 
Die eigentliche Frage ist, wozu du das brauchst. Die Idee der Vererbung ist ja gerade, dass Kind-Klassen alles "passende" von der Eltern-Klasse übernehmen, und alles "unpassende" selbst ergänzen. Wenn das in deinem Entwurf Probleme macht, kann das ein Hinweis darauf sein, dass dein Design nicht stimmt (z.B. dass hier Komposition besser als Vererbung wäre).
 
Hallo,
es war wirklich nur eine theoretische Frage und ich denke, ich habe den Mechanismus jetzt begriffen.
Man kann also nur aus der abgeleiteten Methode die Methode der Superklasse aufrufen, nicht aus der main-Methode.
 
> Man kann also nur aus der abgeleiteten Methode die Methode der Superklasse aufrufen

aus der gesamten abgeleiteten Klasse
 
> Man kann also nur aus der abgeleiteten Methode die Methode der Superklasse aufrufen

aus der gesamten abgeleiteten Klasse
Dazu mal ein schön sinnfreies Beispiel:
Java:
// In überschriebener Methode einer Subklasse
// eine andere Methode der Superklasse direkt aufrufen
@Override
public boolean equals(Object obj) {

 return super.toString().length() > 10;
}
 

Neue Themen


Zurück
Oben