Wie erben Sie das statische Feld und ändern dessen Wert?

8

Ich arbeite an einem Programm / Spiel, wo ich statische Dienstklasse mit Params habe.

%Vor%

Dann muss ich diese Werte in bestimmten Fällen überschreiben, z. B. wenn ich auf einer Karte mit begrenzter Punktzahl spiele. Also habe ich folgendes getan:

%Vor%

Und die beabsichtigte Verwendung folgt:

%Vor%

Ich habe diesen Code nicht wirklich getestet, weil sich IDE darüber beschwert, ob ein statisches Feld durch eine Instanz aufgerufen wird und auch über das Verstecken von Feldern. Ich sehe deutlich, dass dieser Code stinkt, also gibt es eine Möglichkeit, dies zu erreichen, oder muss ich jede Param-Klasse separat schreiben?

PS: Ich weiß, ich sollte die Standardklasse abstrakt machen und getters verwenden, ich bin nur neugierig, ob es einen Weg gibt, die Werte statisch zugänglich zu machen.

    
jnovacho 24.04.2013, 21:54
quelle

4 Antworten

6

Sie können statische Member nicht überschreiben - in Java können weder Methoden noch Felder überschrieben werden. In diesem Fall sieht es jedoch so aus, als müssten Sie nichts tun: Da Sie in der Variable ParamsGeneral eine Instanz von par haben, würde eine nicht statische Methode das tun, was Sie für die reguläre Überschreibung benötigen.

%Vor%     
dasblinkenlight 24.04.2013, 21:57
quelle
2

Ich würde keine Unterklassen für ein allgemeines Spiel gegen ein begrenztes Spiel verwenden. Ich würde eine Aufzählung verwenden, wie:

%Vor%

Wenn Sie ein Spiel erstellen, können Sie Folgendes tun:

%Vor%

Und so weiter.

Auf diese Weise können Sie die Art Ihres Spiels ändern und gleichzeitig Ihre Werte zentralisieren. Stellen Sie sich vor, Sie müssten für jede Art von Parameter eine neue Klasse erstellen. Es könnte sehr kompliziert werden, du könntest Hunderte von Klassen haben!

    
durron597 24.04.2013 21:58
quelle
1

Einfachste Lösung ist dies zu tun:

%Vor%

Sie brauchen keine Instanz von ParamsGeneral, es ist nur eine Sammlung von statischen Definitionen für Ihr Spiel.

    
CBass 24.04.2013 22:04
quelle
0

Habe MAX_SCORE private static mit öffentlichen statischen Gettern; dann kannst du ParamsGeneral.getMaxScore und ParamsLimited.getMaxScore aufrufen und du erhältst 1000 bzw. 500

    
Zim-Zam O'Pootertoot 24.04.2013 21:57
quelle

Tags und Links