![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
|
Oh Mann, ich habe heute aber viele kleine Problemchen *g* Aaaaalso. Ich habe eine Klasse "BorderBarricade extends Line2D.Double". Jut. Nichts Besonderes. Nun habe ich eine Membervariable Code: private Float acceleration = new Float(1.0f); Code: The Constructor Line2D.Float(float) is undefined. ... hä?Explizites Importieren von Float ist ja unnötig, da es im lang-package liegt. Wenn ich die Deklaration und Initialisierung mittels Code: private java.lang.Float acceleration = ... Warum ist das denn so? Also ich verstehe nicht, warum
Kann das jemand mal bitte nachvollziehen und mir dann erklären, warum das so ist? Dank und Grüße, Ben. |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.108
|
Es geht um den Scope. Die Reihenfolge: 1. Klasse (d.h. unter anderem auch innere Klassen) und parent-Klassen 2. Package, in dem die Klasse liegt 3. Importierte Packages 4. java.lang Die Sortierung macht bei genauerer Überlegung Sinn. Wenn es eine Klasse "Float" in deinem Objekt gibt, dann ist es wahrscheinlicher, dass du die verwenden willst, als dass du java.lang.Float möchtest. Der Fehler mit dem Konstruktor kommt daher, dass du Line2D.Float(1.0f) aufrufst - und den Konstruktor gibt es nicht. |
| | |
| | Nach oben #3 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
|
Okay. Sortierung finde ich auch logisch. Hatte ich nur noch nie so gesehen bzw. gelesen. Zitat:
Wo mach ich das denn? Ich rufe Float(..) auf und nicht Line2D.Float(..) .. | |
| | |
| | Nach oben #4 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.108
|
Du bist aber in der Klasse Line2D, also greift die Hierarchie, die dir zuerst Line2D.Float serviert. Line2D.Double erbt von Line2D, d.h. du könntest auch new Line2D.Double.Float.Double.Float.Float.Float() aufrufen... |
| | |
| | Nach oben #5 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
| Zitat:
![]() Wenn möglich hätte ich das gerne nochmal erklärt | |
| | |
| | Nach oben #6 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.108
|
Einer Unterklasse stehen alle Methoden, Attribute und inneren Klassen einer Klasse zur Verfügung (visibility >= protected), d.h. die Klasse Line2D.Double hat die Klasse Float von Line2D geerbt, deshalb ist new Line2D.Double.Float() ein valider Ausdruck. Das wissend kann man das ganze rekursiv durchgehen. Line2D.Float hat die Klassen Double und Float von Line2D geerbt und man kann deshalb auf sie zugreifen. |
| | |
| | Nach oben #7 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
|
Ok. Klingt logisch. Hm, das heißt also, dass der Punkt im Klassennamen wirklich was zu bedeuten hat Ich muss aber ehrlich gestehen, dass ich nicht so ganz verstehe, was das genau ist. Wenn ich jetzt in die API schaue, dann sehe ich da nichts von der Klasse Float Woher weiß man also, dass es so ist, wie es zu sein scheint bzw. ist? |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |