Abstrakte Klasse - static Attribute deklarieren

iTobi97

Aktives Mitglied
Hallo liebe Community,

ich versuche gerade ein etwas größeres Spiel zu schreiben und bin dabei auf ein Problem gestoßen. Ich möchte gerne eine abstrakte Methode schreiben, welche 5 static Attribute aufweist, welche ich aber noch nicht initialisieren möchte, sodass alle davon erbenden Klassen (Typen) verschiedene final Werte (Eigenschaften bzw. Fähigkeiten) haben. Der Compiler meldet mir aber einen Fehler zurück, wenn ich versuche in der abstrakten Klasse final Variablen verwende, ohne diese zu initialisieren. (Ist ja eigentlich logisch, da ich ja keine Konstante ohne einen Wert angeben kann). Ich programmiere das Spiel nach einem vorgegebenen UML-Klassendiagramm. Und dort sind die fünf Variablen eben als final (readOnly) deklariert. Klar könnte ich die Eigenschaften in der Superklasse jetzt einfach weglassen, und jeweils in den Unterklassen die Werte setzen. Aber dann wäre das nicht mehr laut der Aufgabenstellung.

Gibt es irgendeine Möglichkeit, final Variablen ohne Wert in der Superklasse zu realisieren oder irgendwelche anderen lustigen Ideen?

Vielen Dank schon einmal im Voraus
VG
 
Zuletzt bearbeitet:
Das was du vorhast geht so nicht.
Statische Variablen "gehören" jeweils zu der Klasse, in der sie deklariert sind - in diesem Fall gäb es sie also wirklich nur einmalig und nicht einzeln für jede Unterklasse.

Ich würde auch bezweifeln, dass das so gefordert ist - zumindest dieser Teil:
abstrakte Methode schreiben, welche 5 static Attribute aufweist
Ist Humbug.
Methodenparameter können nicht static sein, und andere gibt in abstrakten Methoden auch nicht.

Ich programmiere das Spiel nach einem vorgegebenen UML-Klassendiagramm. Und dort sind die fünf Variablen eben als static (readOnly) deklariert.
Sind sie static oder readOnly oder beides?
 
Oh sorry, ich hab wirklich totalen Blödsinn geschrieben, ich meinte natürlich statt static final... sonst macht die ganze Frage ja auch gar keinen Sinn.
Tut mir Leid, war gerade wohl etwas abgelenkt, also denk dir überall wo static steht ein final hin 😀.
 
Oh sorry, ich hab wirklich totalen Blödsinn geschrieben, ich meinte natürlich statt static final... sonst macht die ganze Frage ja auch gar keinen Sinn.
Tut mir Leid, war gerade wohl etwas abgelenkt, also denk dir überall wo static steht ein final hin 😀.
Dann versteh ich die Frage ehrlich gesagt nicht, wie üblich im Konstruktor initialisieren und fertig?
 
@Javinner , würde ich sehr gerne, ich möchte allerdings keine Schwierigkeiten mit dem Autor bekommen 🙂
Sinngemäß steht in UML eine vererbende und mehrere erbende Klassen. Beide haben die selben Variablen (jeweils readOnly), nur ist in der Superklasse keine Werte angegeben, und in den jeweiligen Unterklassen schon.
 
@Javinner
Mehr Informationen kann ich leider nicht geben. Meine Frage war ja auch mehr generell gestellt.
Bsp: (Mercedes erbt von Typ)

Klasse Typ
+MARKE: String {readOnly}

Klasse Mercedes
+MARKE: String = "Mercedes" {readOnly}
 
Danke @DerWissende für deine unglaublich hilfreiche und zielführende Antwort! Das war nur ein Beispiel, welches ich mir in einer Minute ausgedacht habe... Denk dir statt Mercedes halt Addidas, Nike, Puma...oder sonst was 😀
 
Danke @DerWissende für deine unglaublich hilfreiche und zielführende Antwort! Das war nur ein Beispiel, welches ich mir in einer Minute ausgedacht habe... Denk dir statt Mercedes halt Addidas, Nike, Puma...oder sonst was 😀
Auch wenn er das absolut nicht rüber bringen kann, hat er zumindest recht damit, das das Beispiel Unsinn ist - auch mit Puma und Nike 😉
Das wären Instanzen, und keine Klassen - oder gibt es mehrere Instanzen von „Nike“?
 

Zurück
Oben