Pracuję nad programem/grą, w której mam statyczną klasę użyteczności z parametrami.Jak dziedziczyć statyczne pole i zmieniać jego wartość?
class ParamsGeneral {
public static final int H_FACTOR = 100;
public static int MAX_SCORE = 1000;
...
}
Następnie muszę nadpisać te wartości w niektórych szczególnych przypadkach, na przykład na mapie z ograniczonym wynikiem. Więc zrobiłem następujący:
class ParamsLimited extends ParamsGeneral {
public static int MAX_SCORE = 500;
// other params stay same
}
i zamierzone użycie jest następujący:
class Player {
ParamsGeneral par;
public Player() {
if(onLimitedMap()){
par = new ParamLimited();
}
}
public boolean isWinner() {
if(this.score == par.MAX_SCORE) {
return true;
}
return false;
}
}
nie zostały faktycznie przetestowane tego kodu, ponieważ IDE narzeka nazywając pola statycznego poprzez przykład i również o ukrywanie pola . Wyraźnie widzę, że ten kod jest cuchnący, więc czy istnieje sposób, aby to osiągnąć, czy też muszę osobno napisać każdą klasę paramu?
PS: Wiem, że chcę uczynić domyślną klasę abstrakcyjną i używać getterów, jestem ciekawy, czy istnieje sposób na statyczne udostępnienie wartości.
Powiedziałbym, że prawdopodobnie nie chcesz statycznych pól/metod tutaj, to jest tak proste, jak to naprawdę. Dlaczego po prostu nie utworzyć jego instancji i uzyskać pełne dziedzictwo? – ddmps
Cóż, to chyba zły nawyk z C, w którym używałem prostego #define do ustawiania parametrów globalnych. Wydawało mi się to trochę przesadzone, tworząc instancję tylko z numerycznymi parametrami. – jnovacho