Cannot refer to an instance field xxx while explicitly invoking a constructor

TarGeT

Mitglied
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:

Java:
class Gifts extends Laptops
{
	Gifts()
	{
		super(Preis, 2, 1000);
	}
	
}

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?
 
G

gman

Gast
Hi,

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.
 

xehpuk

Top Contributor
Vermutlich sieht das so in der Art aus?

Java:
public class Laptops {
	protected int preis;
	protected int ramSize;
	protected int hdSize;
	
	public Laptops(int preis, int ramSize, int hdSize) {
		this.preis = preis;
		this.ramSize = ramSize;
		this.hdSize = hdSize;
	}
}

class Gifts extends Laptops {
	Gifts() {
		super(preis, 2, 1000);
	}
}

Das ergibt ja nicht so viel Sinn. Welchen Wert soll
Code:
preis
zu dem Zeitpunkt haben?
 

TarGeT

Mitglied
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.

Java:
class Monster extends Bossmonster
{

int iRandomspawnX = Underworld.randomnumber();
int iRandomspawnY = Underworld.randomnumber();

    Monster()
    {
        super(iRandomspawnX, iRandomspawnY, 2, 1000);
    }
    
}

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

Java:
Bossmonster Diablo = new Bossmonster(100, 100, 99, 10000);
Monster Ghul = new Monster();
Monster Zombie = new Monster();
Monster Ghost = new Monster();
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Ja, weil es diese Variablen nicht gibt.

Schreibe
Java:
class Monster extends Bossmonster
{
    Monster(int iRandomspawnX, int iRandomspawnY)
    {
        super(iRandomspawnX, iRandomspawnY, 2, 1000);
    }
    
}
 
M

Marcinek

Gast
Ja dann kannst du da keine Variablen benutzen.

Axo dann verstehe ich es ^^
Dann musst du deine beiden Randoms static machen oder

Die Methoden direkt da einfügen

oder einen neuen Konstrukor bauen, der diese dann setzt.
 

TarGeT

Mitglied
Ja dann kannst du da keine Variablen benutzen.

Axo dann verstehe ich es ^^
Dann musst du deine beiden Randoms static machen oder

Die Methoden direkt da einfügen

oder einen neuen Konstrukor bauen, der diese dann setzt.

Ja es funktioniert! Besten Dank! Also man muss die beiden Randoms static machen.

also
Java:
class Monster extends Bossmonster
{
 
static int iRandomspawnX = Underworld.randomnumber();
static int iRandomspawnY = Underworld.randomnumber();
 
    Monster()
    {
        super(iRandomspawnX, iRandomspawnY, 2, 1000);
    }
    
}

So jetzt muss ich mir mal die "static" Beschreibung durchlesen hehe
 

xehpuk

Top Contributor
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.

Funktionieren würde dies:
Java:
class Monster extends Bossmonster {
    Monster() {
        super(Underworld.randomnumber(), Underworld.randomnumber(), 2, 1000);
    }
}
 

TheDarkRose

Gesperrter Benutzer
Oder auch die Variablen erst im Konstruktor initialisieren.
Java:
class Monster extends Bossmonster
{
 
         int iRandomspawnX;
         int iRandomspawnY;
 
    Monster()
    {
        iRandomspawnX = Underworld.randomnumber();
        iRandomspawnY = Underworld.randomnumber();
        super(iRandomspawnX, iRandomspawnY, 2, 1000);
    }
 
M

Marcinek

Gast
Ich hätte mich auch eher für die 2. Variante entschieden.

Jedoch kannst du das nicht so machen, wie DarkRose es angezeigt hat, da das erste, was da gemacht werden muss ist der super() aufruf.

Du musst diesen Random direkt als Parameter übergeben.
 

Noctarius

Top Contributor
Oder auch die Variablen erst im Konstruktor initialisieren.
Java:
class Monster extends Bossmonster
{
 
         int iRandomspawnX;
         int iRandomspawnY;
 
    Monster()
    {
        iRandomspawnX = Underworld.randomnumber();
        iRandomspawnY = Underworld.randomnumber();
        super(iRandomspawnX, iRandomspawnY, 2, 1000);
    }

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.


Warum sollte das nicht gehen?

Probier's aus ;)
 

TarGeT

Mitglied
Code:
static
ist hier sicherlich nicht die Lösung. Dadurch startet jedes Monster an derselben Stelle.

.....


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:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
M Cannot refer to a non-final variable Java Basics - Anfänger-Themen 10
W Cannot find Symbol Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
W Cannot resolve symbol 'HttpServlet' Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
Flo :3 Variablen Type dismatch: cannot convert from string to int Java Basics - Anfänger-Themen 9
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
V ClientProtocolException cannot be resolved Java Basics - Anfänger-Themen 6
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
J The import org.bukkit cannot be resolved Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
L cannot find symbol variable Kon Java Basics - Anfänger-Themen 8
L constructor cannot be applied... Java Basics - Anfänger-Themen 22
F Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 5
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
P a cannot be resolved bei einer do while Schleife Java Basics - Anfänger-Themen 1
R return: cannot find symbol Java Basics - Anfänger-Themen 2
L Bluej Error: Cannot find Symbol Java Basics - Anfänger-Themen 13
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
S Cannot find symbol (symbol ist eine Variable) Java Basics - Anfänger-Themen 13
N Cannot find symbol Java Basics - Anfänger-Themen 18
T Error: int cannot be dereferenced Java Basics - Anfänger-Themen 10
J JLabel cannot be resolved Java Basics - Anfänger-Themen 8
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P Cannot find symbol, wieso? Java Basics - Anfänger-Themen 5
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
M Erste Schritte cannot find symbol - Probleme mit Klassen Java Basics - Anfänger-Themen 6
B OOP next cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
J Error: cannot find symbol - variable Java Basics - Anfänger-Themen 3
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
F Erste Schritte parseint: cannot find symbol Java Basics - Anfänger-Themen 6
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
M Erste Schritte [Variable] cannot be resolved to a variable Java Basics - Anfänger-Themen 4
M The Selection cannot be launched... Java Basics - Anfänger-Themen 4
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
D error: cannot find symbol Java Basics - Anfänger-Themen 3
B Frage zu Beispielprogramm: "error: cannot find symbol" Java Basics - Anfänger-Themen 2
M Methoden Cannot be resolved to a variable Java Basics - Anfänger-Themen 5
BlueMountain Erste Schritte error: cannot find symbol Java Basics - Anfänger-Themen 2
P enum: cannot be resolved to a type Java Basics - Anfänger-Themen 2
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
L Error: Cannot find symbol Java Basics - Anfänger-Themen 1
W int cannot be dereferenced Java Basics - Anfänger-Themen 5
P Cannot find Symbol Java Basics - Anfänger-Themen 3
K Compiler-Fehler Button cannot be resolved or is not a field Java Basics - Anfänger-Themen 6
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
K The Java Runtime Environment cannot be found. Java Basics - Anfänger-Themen 6
F Input/Output IOTools Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 16
L Cannot Find Symbol - Was soll denn das bedeuten?!? Java Basics - Anfänger-Themen 7
P StdIn.readDouble: cannot find symbol Java Basics - Anfänger-Themen 7
B Fehler "Cannot find symbol - variable number1" Java Basics - Anfänger-Themen 13
P Variablen Cannot be resolved to a variable Java Basics - Anfänger-Themen 8
B Compiler-Fehler cannot find symbol Java Basics - Anfänger-Themen 6
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
T Cannot convert from Integer to int Java Basics - Anfänger-Themen 12
K Cannot find symbol Java Basics - Anfänger-Themen 3
H cannot find symbol Java Basics - Anfänger-Themen 4
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
S cannot find symbol, symbol: constructor Java Basics - Anfänger-Themen 2
3 Compiler-Fehler Fehlerbehebung cannot find Symbol Java Basics - Anfänger-Themen 4
R Compiler-Fehler Cannot find symbol (Method printIn) Java Basics - Anfänger-Themen 3
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
M Meldung "cannot convert flom boolean to boolean[]" Java Basics - Anfänger-Themen 3
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
B Polymorphie A obj = new B; "cannot find symbol app()" Java Basics - Anfänger-Themen 5
S wieso Fehlermeldung cannot find symbol hier Java Basics - Anfänger-Themen 10
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
T Cannot find Symbol(String) Java Basics - Anfänger-Themen 9
C cannot convert from int to boolean Java Basics - Anfänger-Themen 3
2 Compiler-Fehler cannot find symbol Java Basics - Anfänger-Themen 13
N Erste Schritte import javax.media.3d....; //Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 10
B Erste Schritte cannot find symbol - problem Java Basics - Anfänger-Themen 9
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
K int cannot be dereferenced Java Basics - Anfänger-Themen 2
H LocationReferenceImpl cannot be resolved to a type Java Basics - Anfänger-Themen 5
D Cannot find symbol variable Java Basics - Anfänger-Themen 9
A Compiler-Fehler Cannot find Symbol Java Basics - Anfänger-Themen 6
M Objekt Cannot instantiate the type ... Java Basics - Anfänger-Themen 10
V Datentypen int cannot be dereferenced Java Basics - Anfänger-Themen 4
R Compiler-Fehler sequenz cannot be resolved or is not a field Java Basics - Anfänger-Themen 2
V Packages: Cannot find symbol Java Basics - Anfänger-Themen 12
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
T Cannot be resolved to a variable Java Basics - Anfänger-Themen 8
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
C i cannot be resolved (obwohl es im schleifekopf initialisiert worden ist) Java Basics - Anfänger-Themen 2
W Compiler-Fehler variable cannot be resolved / duplicate local variable Java Basics - Anfänger-Themen 11
C Fehlermeldung "The import TestProjekt cannot be resolved". Warum? Java Basics - Anfänger-Themen 7
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben