Vererbung Zugriff auf Methode funktioniert nicht (static/non-static)

selina55555

Mitglied
Hallo,

ich bekomme beim Compilen meines Programms folgende Fehlermeldung:
non-static method cannot be referenced from a static context

Ich bin bisher nicht darauf gekommen, wie ich dies beheben kann. Ich habe eine Klasse Spiel, die die Methode use aufrufen soll, wenn der Benutzer "use" + Name eines Gegenstands eintippt.
Java:
private boolean verarbeiteBefehl(Befehl befehl)
    {
        boolean moechteBeenden = false;
        Befehlswort befehlswort = befehl.gibBefehlswort();
        switch(befehlswort){
          
...
       
            case USE: 
                 Objekt.use(befehl);
                 break;

...
                 break;

Die Methode use ist definiert in einer Oberklasse Objekt mit den Unterklassen Blume, Buch, Schatz und Tier. Jede der Unterklassen führt eine andere Anweisung aus, wenn die Methode use ausgeführt wird. Hier z.B. die Methode der Unterklasse Blume.
Die Oberklasse ist nicht abstract.

Code:
 public void use(Befehl befehl)
    {
        Iterator<Objekt> it = Biene.rucksack.iterator();
        while(it.hasNext()) {
            Objekt loeschen = it.next();
            if(loeschen.getSuchbegriff().equals(befehl.gibZweitesWort())){
                tragkraft += getKraft();  //Kraft addieren
                System.out.println("Du hast das Objekt '" + loeschen.getName() + "' gegessen.\nDeine Tragkrafte beträgt nun " + bienchen.tragkraft + " Gramm.");
                it.remove();
                rucksackWiegenPrint();
                rucksackFreiPrint();
                return;
            }
        }
        System.out.println("Das hat nicht geklappt. Das Objekt befindet sich nicht in deinem Rucksack.");
    }

Ich hoffe mir kann jemand weiterhelfen.

Liebe Grüße,
Selina
 
Du versuchst die nicht statische Methode über ein Objekt ohne Referenz aufzurufen.
Wenn du das so machen willst, dann solltest du deine Methode Methode auch static machen. (was nicht zu empfehlen ist)

Java:
public static void use(Befehl befehl) {}

Besser ist es aber einfach eine Instanz von Objekt zu erstellen und die Methode über diese Instanz aufzurfen:
Java:
Objekt obj = new Objekt();
obj.use(..);

BTW: Objekt ist ein ganz schlechter Name für eine Klasse, da es die Klasse Object bereits gibt. Nenn sie lieber BefehlsObjekt oder was auch immer die Objekt Klasse sein soll.

Gruß
Robert
 
Du rufst die Methode use ohne Objekt auf! Entweder machst du machst die Methode use static! Oder erzeugst ein Objekt über das du die Methode aufrufst!

Edit: @Robat war schneller 😀
 
BTW: Objekt ist ein ganz schlechter Name für eine Klasse, da es die Klasse Object bereits gibt. Nenn sie lieber BefehlsObjekt oder was auch immer die Objekt Klasse sein soll.
obj ist als Bezeichner Usus für Platzhalterobjekte, btw.

Bearbeitung:
Wie sollte es sein? Wikipedia-Artikel dazu:
https://en.wikipedia.org/wiki/Placeholder_name#Computing
https://en.wikipedia.org/wiki/Metasyntactic_variable

wobei man bla, blubb and blabla eher selten sieht - das wirkt auch unprofessionell. Zumal blubb auch noch negativ konnotiert ist. 🙁
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben