PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JAVA - Dynamische Bindung



McSnoop
18-10-2004, 17:47
public class DynBind06{
public static void main (String args[]){
Hund h = new Hund();
Maus m = new Maus();
laerm(h); <------ Problem
laerm(m); <------- Problem
}
static void laermImHaus(Haustier h){
System.out.println(h.laerm());
}
}

class Haustier{
String laerm(){
return "...";
}

class Maus extends Haustier{
}

class Hund extens Haustier{
String laerm(){
return "WAU WAU";
}
}



nun soll als Ausgabe folgendes rauskommen:


...
WAU WAU


aber er bringt nur bei Problem: Die MEthode ist undefiniert für den type DynBind06, warum????

Laut buch soll das aber funzen.

mfg
Snoop

fs111
18-10-2004, 18:07
Ich denke das Buch möchte, dass Du die Methode "learmImHaus" aufrufst, und nicht learm, denn die "laerm"-Mehtode gehört ja zu allen Haustier-Objekten und nicht zu der DynBind06-Klasee.

Das ganze dann also so:



public class DynBind06
{
public static void main (String args[])
{
Hund h = new Hund();
Maus m = new Maus();
laermImHaus(h);
laermImHaus(m);
}
static void laermImHaus(Haustier h)
{
System.out.println(h.laerm());
}
}



HTH

fs111

McSnoop
18-10-2004, 18:18
Nein im Buch steht

laerm(h);
laerm(m);

aber wenn ich laermImHaus(h) schreibe geht das nicht weil dann auch ein fehler auftritt.

"The method laermImHaus(Haustier) in the type DynBind06 is not applicable for the arguments(Hund)"


Aber ich glaube schon das dort laerm(h) und laerm(m) stehen muss, aber ein konstruktor fehlt doch nicht oder seh ich das falsch??

mfg
Snoop

McSnoop
18-10-2004, 18:23
wenn ich schreibe :

String test1 = h.laerm();
String test2 = m.laerm();

System.out.println(test1+" "+test2);

dann kommt die ausgabe: WAU WAU ...

Aber was hat das dann noch mit dynamischer Bindung zu tun??? das ist ja dann nur noch einfaches referenzieren.

xare
18-10-2004, 19:30
aber wenn ich laermImHaus(h) schreibe geht das nicht weil dann auch ein fehler auftritt.

"The method laermImHaus(Haustier) in the type DynBind06 is not applicable for the arguments(Hund)"

doch, das geht. Der Fehler muss bei dir im Programmcode liegen.

MfG Xare

fs111
19-10-2004, 09:06
"The method laermImHaus(Haustier) in the type DynBind06 is not applicable for the arguments(Hund)"


Dann ist ein Fehler in Deinem Code. Da ja die Klasse Hund von Haustier erbt, darf er da nicht meckern, da ein-Hund Objekt auch ein Haustier-Objekt ist.

fs111

McSnoop
19-10-2004, 10:13
im Quelltext ganz oben fehlt bei dem 2ten extends das "d" aber das wa rnicht der fehler das hatte ich mich nur hier verschrieben.

Aber ich bin den quelltext nochmal durchgegangen zeichen für zeichen. Identisch abgeschrieben aus dem buch und wieder bei den beiden Problemstellen:

"The Method laerm(Hund) is undefined for the type DynBind06"
"The Method laerm(Maus) is undefined for the type DynBind06"

ich weis auch nicht warum aber das sourcefile ist eins zu eins übertragen.

ka warum das nicht will. Das ist das erste Beispiel was nicht funzt aus diesem Buch.

mfg
Snoop

McSnoop
19-10-2004, 10:18
gut ich habe jetzt auch nochmal das ganze mit laermImHaus(h) und laermImHaus(m) gemacht und es geht. Aber dann ist das ein Fehler im Buch, weil da steht nur laerm(h) und laerm(m). *ggg* nen Bug darf ich ihn behalten. ^^

naja

hab mir das nochmal durch den kopf gehen lassen. Das dort nur laermImHaus stehen kann, weil dann ergibt das auch sinn.

*klick*

jetzt auch das system verstanden was hintder der dynamischen bindung steht. =)

fs111
19-10-2004, 10:23
Am besten schreib dem Autor, dass er einen Fehler hat, das ist ja für spätere Auflagen nur gut, wenn sowas korrigiert wird.

fs111

McSnoop
19-10-2004, 10:53
hab grad dem author nem Dr. Thomas Kröckertskothen eine Email zukommen lassen. 12 Leutz haben das Buch korrektur gelesen vom Ing. - zum Prof. Dr. alles dabei.

Naja aber auf 200 seiten 1 Fehler ist schon Respektiv gut.

Hab das Buch ja schon zur Hälfte jetzt durch und somit zur Hälfte Korrektur gelesen. ^^

Snoop

fs111
19-10-2004, 19:17
Wäre interessant, ob Du eine Rückmeldung erhälst. Bitte poste das hier dann doch bitte (muss ja nicht die Mail sein, sondern nur sinngemäß).

fs111