Problem mit Interface und Thread

chickenwings

Erfahrenes Mitglied
Hallo Forum,

ich habe ein Interface geschrieben. Dieses IF wird von einigen Klassen implementiert, die ebenfalls von einer anderen Klassen erben, die Thread erweitert. Problem ist nun, daß ich an meine Klasse, die mein Interface implementiert, nicht die Methode start() aufrufen kann.
Wie komme ich aus dem Dilemme raus, jemand einen Rat?

Klar was ich damit ausdrücken will?

Grüsse,
chickenwings
 
Moin!
Also nochmal zusammengefasst.
Du hast ein paar Klassen, die von Thread erben, d.h. sie erben auch die Methode start()
Manche dieser Klassen implementieren zusätzlich dein Interface. Soweit richtig?

Denn dann würde ich nicht verstehen, aus welchem Grund du die start() Methode nicht aufrufen kannst...

*grüssle*
MeinerEiner
 
Also ich hab den gleichen Sachverhalt auch schon modelliert und bei mir gab es die Probleme nicht.

egal ob extends Thread oder implements Runnable
 
Wenn ich Dich richtig verstehe, hast Du ein zentrales Interface I mit x Methoden geschrieben. Dann hast Du eine Klasse, die von Thread erbt. Nun wiederum hast Du x Klassen, die von dieser Klasse erben und Dein Interface implementieren. Nennen wir sie Z1...Zn.

Wenn Du nun versuchst alle Z1...Zn als I anzusehen, findest Du keine "start()"-Methode, es sei denn, Du nimmst sie mit der gleichen Signatur wie in Thread in Deinem Interface I mit auf, dann kannst Du darauf auch zugreifen.
 
Oder du castest das Interface einfach auf den jewiligen Typen, dann kannst du das Interface so belassen!
 
Hallo,

hmm, also, meine Klassen erben von einer anderen Klasse, die von Thread erbt, also erben meine Klassen auch von Thread.
Ich versuche das mal mit folgendem Konstrukt zu veranschaulichen:
Code:
public class AndereKlasse extends Thread {
...
}
Code:
public class MeineKlasse extends AndereKlasse implements MeinInterface {
...
}
Code:
public class KontrollKlasse {
  MeinInterface _meinObject;
  _meinObject = new MeineKlasse();

 _meinObject.start(); //funktioniert leider nicht - Fehlermeldung

}

Hier meckert der Compiler: "Method start() is undefined for the type MeinInterface
Vielleicht wird es so klarer. Ich habe leider auch nur Java 1.4 zur Verfügung.


chickenwings
 
Da hat schnuffie dein Problem genau richtig erkannt:

entweder du machst es so wie er es sagt oder du castest dein _meinObject auf MeineKlasse

also: ((MeineKlasse)_meinObject).start();
 
Aber wenn ich so drüber nachdenke ist schnuffie's Variante die bessere Lösung da du dein Object sicherlich nur über das Interface zugängig machen willst denn da wäre es besser gekapselt.
 
Hat es eigentlich einen bestimmten Grund warum du meinObject so
Code:
MeinInterface _meinObject = new MeineKlasse();
und nicht so
Code:
MeineKlasse _meinObject = new MeineKlasse();

deklarierst?
 
@schnuffi: genau so ist mein Konstrukt und genau das ist mein Problem.

ich scheue mich aber start() aus Thread mit in mein Interface aufzunehmen und ein Cast kommt nicht in Frage, da ich dann auch auf das Interface verzichten kann. Also versuche ich folgendes:

Ich nehme in mein Interface eine Methode auf, sagen wir renne();. Diese Methode macht nichts anderes als start(); aufzurufen und schon sollte es gehen, oder?

Danke,
chickenwings
 
Zurück