Vererbung und Methoden - Frage

mgg4711

Grünschnabel
Hallo liebes Forum,

leider habe ich für mein Problem keine Antwort gefunden.

Ich habe zwei Klassen A und B. B erbt von A.

Java:
public class A {
public void print() {System.out.println("Klasse A");}
public void test() {this.print();}
public void test3() {this.test();}
}

public class B extends A {
@Override
public void print() {System.out.println("Klasse B");}
public void test2() {super.print();}
public void t() {test3();}
}

Wenn ich jetzt ein Objekt b1 der Klasse B erzeuge und test() aufrufe, wird "Klasse B" ausgegeben, obwohl ich "Klasse A" ausgeben wollte (in der Vererbung von Klasse A wird die überschriebene Methode print() aufgerufen).

Wie kann man in einem Objekt der Klasse B, die ja von A geerbt hat, in der "geerbten" Methode test() dafür sorgen, dass die Methode print() von Klasse A ausgeführt wird? Also sozusagen das Gegenteil von "super".

Ich hoffe, ich habe mich klar ausgedrückt. Vielen Dank für Eure Antworten.
mgg
 
Hi

wieso "Gegenteil"? Das ist doch genau, was super macht (zumindest wenn ich das Vorhaben verstanden habe)
Folgender Code noch in B;
Java:
public void test() {super.print();}
 
Hallo sheel,

danke für die Antwort. Leider muss ich aber in dem Objekt b1 (also von B) in der zu vererbenden Klasse A (Superklasse) eine Berechnung / Ausgabe durchführen und DORT die Methode print() (also die von A) aufrufen, obwohl die Methode print() in B überschrieben wurde.

Ich möchte nämlich in B eine test()-Methode haben, die auch nur für "B" funktioniert und in "A" eine Methode test(), die die Methode test() aus A aufruft, auch wenn ich vererbe.
 
Hallo mgg4711,
Ich möchte nämlich in B eine test()-Methode haben, die auch nur für "B" funktioniert und in "A" eine Methode test(), die die Methode test() aus A aufruft, auch wenn ich vererbe.
das wird so leider nicht ganz gehen, da es dem Konzept der Vererbung widerspricht. Die Klasse A hat keinen Einfluss darauf, wie (und ob) die vererbte Klasse B eine bestimmte Methode benutzt, sie kann sie lediglich anbieten.
Eine Möglichkeit wäre, die Methode test() in A als final zu deklarieren. Dann kann B sie nicht überschreiben. Damit kannst du aber kein "eigenes" test() in B implementieren.
Wenn du die Methode in B überschreibst, wird ein Aufruf B.test() immer die überschriebene Methode aufrufen. Also keinen Zugriff mehr auf A.test()...

Ein möglicher Workaround wäre soetwas hier:
Java:
public class A {

public void test() {
    System.out.println("Klasse A");
    }
}


public class B extends A {

@Override
public void test() {
    System.out.println("Klasse B");
    }

public void superTest() {
    super.test();
    }
}

Gruß Technipion
 

Neue Beiträge

Zurück