OK, das will ich dir verraten...
Mit this referenzierst du immer auf die aktuelle Instanz der Klasse. Rufst du also this.length() auf, wird auch die Objektmethode length() in dieser Klasse aufgerufen.
Nutzt du jetzt allerdings name.length(), so wird die Methode legth() aus java.lang.String aufgerufen, also eine Methode, die Java schon mit sich bringt. Das hängt damit zusammen, dass name vom Typ String ist, und deswegen wird auch eine Objektmethode dieser Klasse (nämlich java.lang.String) aufgerufen. Siehe hier: http://java.sun.com/j2se/1.4.2/docs/api/
Das Ergebnis ist für dich freilich das gleiche, weil ja die length()-Methode in DEINER Klasse auch nur die length()-Methode aus java.lang.String nutzt. Nur wie gesagt wird deine Methode nicht aufgerufen, du kannst sie also getrost aus dem Quelltext löschen.
greez
JoSsiF
??? sorry hab jetzt gar nix kapiert...was kann ich löschen? und warum gehts bei mir mit this.length nicht?
bin noch nicht so bewandert was JAVA und dessen Ausdrücke angeht...Beispiele wären da immer hilfreich
(wenns nicht zuviel Arbeit macht?)
also ich versteh nicht ganz wo jetzt da der Unterschied sein soll ?! bin verwirrt.... ???
also ich versteh nicht ganz wo jetzt da der Unterschied sein soll ?! bin verwirrt.... ???
Genau wie erklärt: der Unterschied ist, dass durch this.length die Objektmethode length() deiner eigenen Klasse aufrufst, während name.length eine Objektmethode einer völlig anderen Klasse aufruft.
So schließt sich übrigens der Kreis: ich hatte am Anfang mal irgendwo erwähnt, dass die Namenswahl "length" für den neuen Methodennamen schlecht ist (ich weiß du kannst nichts dafür, das Buch will es so). Denn die Konsequenz ist, dass du selber nicht mitbekommst, welches length() nun eigentlich ausgeführt wird.
Versuch's doch mal mit der Umbenennung der Methode in myLength(). Was dort drin steht, bleibt natürlich gleich, aber der Aufruf der Methode im Konstruktor muss natürlich angepasst werden. Vielleicht hilft dir das, den Unterschied mitzubekommen.
Kleiner Tipp: Wenn du im Konstruktor dann nach allen Änderungen name.myLength() aufrufst (analog deines jetzigen Codes), gibt's einen Fehler. Das ist der Punkt, an dem es klingeln sollte
greez
JoSsiF
nur mal zum verständnis, weil ich da jetzt nicht weiter dran rumbasteln will: *keine Zeit hab*
also:
name.length benutzt die Methode length die schon in der Javabibliothek definiert ist?
und this.length verweist auf eine Methode die ich selber definiert hab, auch wenn die dann letzlich wieder auf die Javabibliothek zurückgreift?
oder?? mmmh...steig immer noch nicht so ganz durch...naja ich mach mal die anderen Kapitel weiter vielleicht wirds dann klara äh klarer
und this.length verweist auf eine Methode die ich selber definiert hab, auch wenn die dann letzlich wieder auf die Javabibliothek zurückgreift?
Ja sicher. Schau dir doch mal den Inhalt der Methode an.
Aber vielleicht solltest du wirklich erstmal in deinem Buch weiterlesen. Da wird mit der Zeit sicher noch einiges klar, und die Grundlagen können und wollen wir im Forum sowieso nicht vermitteln
greez
JoSsiF
« C++: Buch/Editor- empfehlung | Handbuch Visual Basic 2005??? » | ||