Methoden abstract static Methode

ErfinderLabyrinth

Bekanntes Mitglied
Hi,
ich möchte, dass wenn man die Klasse "Game" extended, dass man eine public static void gameSettings() Methode implementieren muss bzw. dass man die Methode static machen kann:

Bsp1:
[CODE lang="java" title="Game" highlight="8"]package gameengine;

import java.util.List;

import variablen.Task;

public abstract class Game {
protected static abstract void gameSettings();
}[/CODE]
[CODE lang="java" title="vanilla" highlight="14"]package vanillaGameSettings;

import java.util.ArrayList;
import java.util.List;

import gameengine.Game;
import gameengine.Register;
import gameengine.annotations.Mod;
import variablen.Task;

@Mod("vanilla")
public class vanilla extends Game{

public static void gameSettings() {
Register.registerObject(new Baum(), "baum");
Register.registerObject(new Mensch(), "mensch");
}

}
[/CODE]

Fehlernachricht bei Game Zeile 8: The abstract method gameSettings in type Game can only set a visibility modifier, one of public or protected

Bsp2:
[CODE lang="java" title="Game" highlight="8"]package gameengine;

import java.util.List;

import variablen.Task;

public abstract class Game {
protected abstract void gameSettings();
}[/CODE]
[CODE lang="java" title="vanilla" highlight="14"]package vanillaGameSettings;

import java.util.ArrayList;
import java.util.List;

import gameengine.Game;
import gameengine.Register;
import gameengine.annotations.Mod;
import variablen.Task;

@Mod("vanilla")
public class vanilla extends Game{

public static void gameSettings() {
Register.registerObject(new Baum(), "baum");
Register.registerObject(new Mensch(), "mensch");
}

}
[/CODE]
Fehlernachricht bei vanilla Zeile 14: This static method cannot hide the instance method from Game

bei Bsp1 wirft der Fehler keine Exeption, es wird aber trotzdem als Fehler angezeigt, kann man den Fehler irgendwie umgehen, sodass dies nicht als Fehler anzeigt?
 
M

Mart

Gast
ich denke es wird auf generics mit static hinauslaufen sobald man weis wo was registriert wird .. nur das weis man nicht


oder auf das Factory pattern da kannst du die Fabrik Methode static machen


vllt ein anderer Ansatz

Java:
enum Mode{
    VANILLA(new EasySettings()), MEDIUM(...), HARD(...);
private GameSettings setting;
    Mode(GameSettings setting)
    {
        ...
    }
}
falls du das mit den Easysettings machst und vererbung dann wären generics zu "empfehlen" oder die Factory vllt? ich weis ja nicht was bei dir so rum geistert :D

oder wenn du unbedingt static willst kannst du eine Factory benutzen

Java:
enum Mode{

    VANILLA, MEDIUM, HARD;


}
class GameFactory{}
    public static Game makeGame(Mode mode){
    switch(mode)
        case VANILLA=> return new EasyGame();
        case MEDIUM => return new MediumGame();
}
}
 
Zuletzt bearbeitet von einem Moderator:

Robert Zenz

Top Contributor
Statische Methoden koennen nicht abstrakt sein, weil sie nicht unmittelbar Teil der Implementation werden. Wenn du eine statische Methode aufrufst, musst du die korrekte Klasse bereits kennen. Zum Beispiel:

Java:
public class Base {
    public void print() {
        System.out.println("Hello from Base");
    }
}

public class Extension extends Base {
    @Override
    public void print() {
        System.out.println("Hello from Extension");
    }
}

// ---

Base instance = new Extension();
instance.print(); // "Hello from Extension"

Wenn du Instanz-Methoden aufrufst, musst du nicht zwingend die implementierende Klasse kennen, weder beim kompilieren noch zur Laufzeit, diese koennte ja auch von irgendwo stammen:

Java:
Base instance = SomeCustomRepository.createInstance();
instance.print(); // "Hello from Extension"

Aber statische Methoden muessen im Kontext der Klasse welche sie deklarieren aufgerufen werden.

Java:
public class Base {
    public static void print() {
        System.out.println("Hello from Base");
    }
}

public class Extension extends Base {
    public static void print() {
        System.out.println("Hello from Extension");
    }
}

// ---

Base.print(); // "Hello from Base"
Extension.print(); // "Hello from Extension"

Bedeutet, du musst die Klasse beim kompilieren bereits kennen.

Natuerlich, kann man auch das umgehen...aber ob dies Zielfuehrend ist oder nicht ist eine andere Frage.

Java:
public class Base {
    public static void print() {
        System.out.println("Hello from Base");
    }
}

public class Extension extends Base {
    public static void print() {
        System.out.println("Hello from Extension");
    }
}

Base instance = SomeCustomRepository.createInstance();
Class<?> realBaseInstanceClass = instance.getClass();
Method printMethod = realBaseInstanceClass.getMethod("print");
printMethod.invoke(null); // "Hello from Extension"

Wie gesagt, ob das zielfuehrend ist ist sehr sehr fragwuerdig, eher nicht.
 
M

Mart

Gast
Java:
ILab
{
     print();
}

class 1 implements ILab{
print(){
throw new NotSupportedException
}
}
class 2 implements ILab {
print(){
Sysout suppi
}
}
kann gutes und schlechtes design es so zu tun dann hast du deine exception
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S static mit abstract und in interface Allgemeine Java-Themen 10
L Vererbung Using @Autowired in Abstract Classes Allgemeine Java-Themen 4
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
S Frage zu abstract Allgemeine Java-Themen 5
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
G Abstract class Stillfrage Allgemeine Java-Themen 4
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
M abstract Methode aufrufbar? Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
M ist "public abstract class * extends" möglich? Allgemeine Java-Themen 2
T abstract - interface Unterschied Allgemeine Java-Themen 22
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B frage zu "file.renameTo()" bzw. abstract path allg Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
P static Blocks und variablen Allgemeine Java-Themen 41
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
K Static Variablen verbieten Allgemeine Java-Themen 10
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Static oder andere Lösung Allgemeine Java-Themen 5
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static inner Klassen Allgemeine Java-Themen 7
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
I reflection get inner static classes Allgemeine Java-Themen 2
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
G static vor einem array Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
A JSP & static-Variablen Allgemeine Java-Themen 3
B Static Import: Syntaxfrage Allgemeine Java-Themen 2
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
Z auf static Methode aus anderen Package zugreifen? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben