Vererbung und Methoden - Frage


#1
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
 
#2
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();}
 
#3
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.
 

Technipion

Erfahrenes Mitglied
#4
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