Funktion der Mutterklasse aus Kindklasse aufrufen??

  • Themenstarter Themenstarter Mutterklasse
  • Beginndatum Beginndatum
M

Mutterklasse

Gast
Hey, ich habe eine Frage zum Aufruf einer Java Funktion:

Java:
class Klasse1(){
   Klasse2 klasse2 = new Klasse2();

   public void machIrgendwas(){
   }
}

class Klasse2(){
  // Wie kann ich hier die Funktion machIrgendwas aurufen, ohne dass ich der Funktion (this) übergebe und this.machirgendwas() aufrufe?   
}

Ich hab auch schon einige Beiträge durchsucht, mein Problem ist dass ich nicht weiß, unter welchem Stichpunkt ich Lösungen finde

Vielen Dank
Martin
 
Java:
class Klasse1(){
   Klasse2 klasse2 = new Klasse2();
 
   public void machIrgendwas(){
   }
}
 
class Klasse2 extends Klass1(){

public void bla() {
   this.machItgendwas();
}  

}
 
Erstmal kommt hinter Klasse2 kein "()"...

Wichtig hierbei sind die geschweiften Klammern. Deine Klasse2 könnte auch über this nicht auf machIrgendwas zugreifen...

Du musst also eine Instanz von Klasse1 erzeugen und dadurch darauf zugreifen...
 
der Code von Marcinek wäre eine Endlosschleife, so bald man das erste Objekt einer der Klassen erzeugt

edit: ok, abgesehen von den Fehlern
 
Hey,

danke für die Antwort, leider ist es glaub nicht die gesuchte Lösung. Ich hol mal ein bisschen weiter aus.

Ich habe eine Klasse Bank, welche die Funktion verzinsen() hat, die Bank erstellt im Konstruktor das Objekt Zeitgeber. Der Zeitgeber ist eine simuliert laufende Uhr.

Im Zeitgeber gibt es eine Bedingung, dass jedesmal wenn der 1. eines Monats ist, die Funktion verzinsen() aus der Bank klasse ausgeführt werden soll
 
Funktioniert so nicht... Mindestens zwei Compilerfehler...

extends Klasse1 ohne ()

und in bla muss super statt this aufgerufen werden...

Grüße


Da habe ich wohl zu schnell abgeschickt...

Und nnein, da muss kein super genutzt werden.

Und nein es wäre keine Endlosschleife. Wieso auch? - Ohh ja weil da eine Klasse 2 instanziert ist ^^

Habe ich nicht gesehen.
 
@Mutterklasse
ohne irgendwas als Parameter gehts nicht, Callback ist ja auch Irgendwas,
z.B. ein eher allgemeiner Listener, dann muss Bank dieses Interface implementieren
 
Und nnein, da muss kein super genutzt werden.

100 Prozentig 😉 Probier es doch aus... Die methode is ja schließlich nicht definiert für die Klasse 😉. Und mein Compiler meckert...


@ Themenstarter:

Du kannst es wie SlaterB sagt über den Konstruktor machen oder später über einen Setter... Grundsätzlich kannst du auch die Klasse Bank Singleton machen, macht aber wenig Sinn...

Andere möglichkeiten wären ggf. denkbar, da würde ich mir aber 3x überlegen ob ich nicht doch lieber das mit dem Konstruktor nehme (was ich dir auch empfehlen würde...)
 
Wie würde das mit dem Callback funktionieren? Die Bank darf das Interface implementieren, ich will nur der Classe des Zeitgebers keine parameter übergeben, weil ich die Instance öfter aufrufe

Java:
    public static Zeitgeber getZeitgeber() {
        if (zeitGeber == null) {
        	zeitGeber = new Zeitgeber();
        }
        return zeitGeber;
    }
 
100 Prozentig 😉 Probier es doch aus... Die methode is ja schließlich nicht definiert für die Klasse 😉. Und mein Compiler meckert...
nein, was ist denn die genaue Fehlermeldung?

Vererbung ist doch so zentral, man verwendet ständig Methoden der Oberklasse, wäre ja irre da immer was dranzuschreiben,
ein Beispiel habe ich unter deinen Postings gefunden:
http://www.java-forum.org/java-basi...let-bild-laufzeit-hinzufuegen.html#post546862

in Zeile 13 schreibst du
this.setSize(SIZE_X, SIZE_Y);
nicht
super.setSize(SIZE_X, SIZE_Y);
obwohl setSize() doch offensichtlich eine Methode der Superklasse Applet oder noch höher ist
 
@Mutterklasse
wie von Aldimann diesmal vorgeschlagen ginge auch nach Aufruf der statischen Methode noch
ein addListener(this); per Methode, so können auch mehrere Listenener geaddet werden wenn Zeitgeber eine Liste verwaltet,
die Bank würde ansonsten eh darauf achten das nur einmal aufzurufen
 
Sry !

Ihr habt natürlich recht und ich nicht 😉... Hab den Code einfach nur rüber Kopiert und da war ein Schreibfehler im Methoden aufruf 😉...

@ Topic...

Naja wenn Zeitgeber singleton ist, dann muss der Zeitgeber wohl allen Bankeninstanzen am 1. bescheid geben...

Also ne Liste in den Zeitgeber und ne Methode zur Verfügung stellen wo eine Bank sich für das "bescheid geben" registieren kann...
 
@Mutterklasse
wie von Aldimann diesmal vorgeschlagen ginge auch nach Aufruf der statischen Methode noch
ein addListener(this); per Methode, so können auch mehrere Listenener geaddet werden wenn Zeitgeber eine Liste verwaltet,
die Bank würde ansonsten eh darauf achten das nur einmal aufzurufen


Super 🙂
An das nachträgliche hinzufügen hab ich natürlich nicht gedacht...

Funktioniert wunderbar, vielen Dank
 

Zurück
Oben