Moin! Hatte vor ein paar Tagen Java "in die Ecke geworfen" weil ich einfach nachfolgendes Problem nicht lösen konnte. Nun habe ich mich wieder zusammengerauft und komme trotzdem nicht weiter. Ich erhalte diesen Fehler "Cannot refer to an instance field Preis while explicitly invoking a constructor" bei folgendem Code:
Gebe ich den Preis statt der Variable Preis ein habe ich das Problem nicht. Woran liegts? Wäre echt dankbar wenn mich hier jemand erlösen könnte
Gifts selbst soll beim Aufruf keine weiteren Parameter haben, allerdings hatte die Klasse Laptops diese Parameter (Preis, Ram, Festplattengröße) immer verlangt, wie schaffe ich das nun zu überschreiben?
ist "Preis" eine Klasse? Du kannst nicht eine Klasse als Parameter eines Konstruktors
übergeben (höchstens über Preis.class, das hat aber nix mit deinem Problem zu tun)!
Gib doch statt "Preis" einfach einen Zahlenwert ein, so wie bei den anderen Parametern
auch.
Ich muss zugeben der eingangs aufgeführte Codeschnippsel ist sicherlich von der Logik her falsch. Wieso sollte Gifts überhaupt etwas kosten und warum trage ich nicht einfach einen fixen Wert ein. Nun das ist mir bewusst, aber mir ist wichtig diese Fehlermeldung zu verstehen, denn dieser wird in meiner JAVA-Zukunft bestimmt wieder auftauchen. Dieser entsteht immer nur dann wenn ich bei
Java:
super(......)
eine Variable statt einen fixen Wert als Parameter eingebe.
Ok wenn es jemanden stört ich kann das auch anders schreiben Sagen wir ich programmiere ein Spiel und 3 kleine Monster spawnen an einem zufälligen Ort in der Welt = iRandomspawn, und haben das Level 2 und 1000 HP während das Bossmonster immer an einem fixen Punkt auf der Karte (X: 100, Y:100) erscheint. Dabei stammen diese Monster alle von dem Bossmonster ab und verlangen keine Parameter.
Die Variable iRandomspawnX und iRandomspawnY erhalten ihre Werte aus einer Methode einer anderen Klasse die Zufallszahlen vom Typ int ausgibt.
Nun stehe ich wieder vor dem Problem, das Variablen im Konstruktor stehen und das ganze mit der Fehlermeldung "Cannot refer to an instance field iRandomspawnX while explicitly invoking a constructor" quittiert wird. Warum stört sich JAVA daran dass ich eine int Variable statt einem fixen Wert dort eintrage? Ich verstehe das nicht. Wie lässt sich dieses Problem lösen? Ich beiss mir da echt die Zähne aus hehe
Der Konstruktor bzw. Aufruf für das Bossmonster und die kleinen Monster sieht evtl. dann wie folgt aus
Die habe ich im Code vergessen miteinzufügen. Habs verbessert. Aber dennoch hat nun Monster beim Aufruf zwei Parameter als Vorgabe oder? Das soll ja gerade nicht so sein
Das Beispiel überzeugt mich noch immer nicht, da jedes Monster bei dir dadurch ein Bossmonster ist. Es sollte eher andersherum sein: Jedes Bossmonster ist ein Monster.
Code:
static
ist hier sicherlich nicht die Lösung. Dadurch startet jedes Monster an derselben Stelle.
Das geht nicht, da wie bereits gesagt wurde der erste Aufruf in einem Konstruktor der super Call sein muss. Ist nur ein Standard-Konstruktor vorhaben, so ist dieser impliziert automatisch.
Stimmt! ...Hab hier sowieso den Wald vor lauter Bäumen nicht mehr gesehen ... Ok!
Ja stimmt... und die Methode Underworld.randomnumber() gibt sowieso als return einen static int zurück, und daher dann den Rückgabewert in einer Variable zu speichern ist natürlich schlecht, weil es sollen ja gerade nicht alle an einem Punkt spawnen... hehe das habe ich jetzt auch gemerkt.
Aber nichtsdestotrotz der Hinweis mit dem int auf static int war schon mal ein gute Lösungsmöglichkeit falls ich in einem anderen Fall als in diesem Beispiel mit der Fehlermeldung (siehe Titel) konfrontiert werde. Muss mich echt bei allen hier bedanken für die vielen Tipps und Verbesserungsmöglichkeiten :toll: