PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler in JavaCode finden



AnubisTheKing
22-02-2003, 16:04
hi!
also sorry, wenn die frage für manche von euch zu dumm ist, aber ich weiss ehrlich nicht weiter.

habe diesen Codeausschnitt aus einem Programm :

protected void f(Y object)
{
Z z = new Y();
Y y = z;
}

Z ist ein interface
Y ist eine Klasse die Z implementiert

Aufgabenstellung ist den Fehler in dieser Methode zu finden.

Also ich habe das direkt mehrere Fragen:

Z z = new Y();
Kann ich ein Obejkt von einem interface anlegen? Geht das? Das machen die doch gerade hier oder?
Und warum benutzten die dann einfach den Konstruktor von Y? geht das weil Y selber Z implementiert hat? Geht das nur deshalb oder darf man imemr irgendeinen Konstruktor einer anderen Klasse verwende, das kann doch nciht sein oder?

Y y = z;
Hier wird doch versucht zwei unterscheidliche Typen zuzuweisen oder? Das eine wäre vom Typ Z das andere vom Typ Y. Oder geht das doch, weil z ja mit dem Konstruktor von Y erstellt worden ist?

Bis dann AnubisTheKing

anda_skoa
22-02-2003, 16:51
Original geschrieben von AnubisTheKing

Z z = new Y();
Kann ich ein Obejkt von einem interface anlegen? Geht das? Das machen die doch gerade hier oder?


Das geht.
Wenn Y das Interface Z implementiert, dann ist Y ein Z.
Damit ist die Zuweisung gültig.



Und warum benutzten die dann einfach den Konstruktor von Y? geht das weil Y selber Z implementiert hat? Geht das nur deshalb oder darf man imemr irgendeinen Konstruktor einer anderen Klasse verwende, das kann doch nciht sein oder?


Genau, es geht, weil Y ein Z ist.
Man könnte jede Klasse zuweisen die Z implementiert oder wo einer ihrer Superklassen Z implementiert.



Y y = z;
Hier wird doch versucht zwei unterscheidliche Typen zuzuweisen oder? Das eine wäre vom Typ Z das andere vom Typ Y. Oder geht das doch, weil z ja mit dem Konstruktor von Y erstellt worden ist?


Das geht nicht.
Durch die Zuweisung auf z "verliert" (das Objekt selber weiß es schon noch) man die Information, welche Klasse es eigentlich ist.

Das Objekt, auf das z zeigt ist zwar vom Typ Y, aber der Compiler weiß das zu diesem Zeitpunkt nicht mehr.

Wenn es der Programmierer weiß, kann er es dem Compiler mit einem Cast erlauben


Y y = (Y) z;


Ciao,
_

peschmae
22-02-2003, 18:46
wie wärs mit sinnstiftenden Variablennamen :D
ich musste bei anda_skoa's Antwort ständig nach oben schielen, um wieder herauszufinden, was denn jetzt was war.

Ich glaube das Problem wäre für die meisten sonst viel einfacher zu lösen

MfG Peschmä

P.S. @anda_skoa: wo zum (zensur) finde ich die Code - Tags?

anda_skoa
22-02-2003, 19:40
Original geschrieben von peschmae
wie wärs mit sinnstiftenden Variablennamen :D
ich musste bei anda_skoa's Antwort ständig nach oben schielen, um wieder herauszufinden, was denn jetzt was war.


Ja, wäre sicher besser :)



P.S. @anda_skoa: wo zum (zensur) finde ich die Code - Tags?

das ist der Button #
Oder einfach [ code ] und [/ code ] (ohne Leezeichen versteht sich)

Ciao,
_

AnubisTheKing
23-02-2003, 12:35
sorry, ich habe die bezeichnung mir nicht ausgedacht, habe sie einfach von meinem Übungsblatrt übernommen.

danke für die gute Hilfe

bis dann