Ich habe schon auf Google und hier speziell im Forum gesucht, habe aber keine (gute) Lösung gefunden.
Und zwar: ich möchte eine Klassenhierarchie mit der Superklasse 'Item' erstellen, etwa so:
Eine Klasse, die 'Item' erweitert, wäre dann z.B. 'Torch':
Eine Liste, die 'Item' enthält, soll dann idealerweise in etwa so durchlaufen werden:
Eventuell kann ja getName() auch irgendwie statsich gehalten werden.
Ich weiß, dass die Syntax so natürlich nicht funktioniert; eine statische Variable in der Superklasse gilt ja für alle beerbten Klasse und kann nicht "überschrieben" werden.
Aber ich würde gerne wie oben beschrieben so auf 'NAME' zugreifen können, und da dass so nicht klappt, fallen mir nur zwei Wege ein:
1. Statt einer statischen Variable NAME eine Membervariable einführen, die vererbt oder über eine Schnittstelle implementiert wird (was für mich aber nach Speicherverschwendung klingt, denn dann würde ja jede Instanz einer 'Item'-Unterklasse eine eigene Membervariable jedoch mit identischem Inhalt haben; aber vielleicht fällt das ja kaum ins Gewicht, ich weiß nicht so genau); oder die Variable 'NAME' bleibt statisch, aber der Getter wird als Methode über eine Schnittstelle implementiert und immer gleichlautend überschrieben (return NAME), aber auch das klingt nicht wirklich elegant.
oder
2. Die 'NAME'-Werte der Unterklasse als Liste in der Superklasse 'Item' speichern, worauf die Unterklassen dann zugreifen können.
Ich bin mit beiden Lösungen ziemlich unzufrieden. Kennt denn jemand einen Weg, das gewünschte Verhalten zu bewerkstelligen?
Also nochmal kurz: jede Unterklasse von 'Item' soll quasi eine eigene Klassenvariable 'vererbt' bekommen, auf die dann von jeder 'Item'-(Unterklassen-)Instanz aus zugegriffen werden kann (am besten so: String itemName = new Torch().getName() --> "Fackel").
Vielleicht ist es mit einer Membervariablen wirklich am besten und ich bilde mir Unsinn ein...
Und zwar: ich möchte eine Klassenhierarchie mit der Superklasse 'Item' erstellen, etwa so:
Java:
class Item {
private static final String NAME;
public String getName {
return NAME;
}
...
}
Eine Klasse, die 'Item' erweitert, wäre dann z.B. 'Torch':
Java:
class Torch extends Item {
private static final String NAME = "Fackel";
oder idealerweise (bzw. im Konstruktor):
static {
NAME = "Fackel";
}
}
Eine Liste, die 'Item' enthält, soll dann idealerweise in etwa so durchlaufen werden:
Java:
items[i].getName();
Eventuell kann ja getName() auch irgendwie statsich gehalten werden.
Ich weiß, dass die Syntax so natürlich nicht funktioniert; eine statische Variable in der Superklasse gilt ja für alle beerbten Klasse und kann nicht "überschrieben" werden.
Aber ich würde gerne wie oben beschrieben so auf 'NAME' zugreifen können, und da dass so nicht klappt, fallen mir nur zwei Wege ein:
1. Statt einer statischen Variable NAME eine Membervariable einführen, die vererbt oder über eine Schnittstelle implementiert wird (was für mich aber nach Speicherverschwendung klingt, denn dann würde ja jede Instanz einer 'Item'-Unterklasse eine eigene Membervariable jedoch mit identischem Inhalt haben; aber vielleicht fällt das ja kaum ins Gewicht, ich weiß nicht so genau); oder die Variable 'NAME' bleibt statisch, aber der Getter wird als Methode über eine Schnittstelle implementiert und immer gleichlautend überschrieben (return NAME), aber auch das klingt nicht wirklich elegant.
oder
2. Die 'NAME'-Werte der Unterklasse als Liste in der Superklasse 'Item' speichern, worauf die Unterklassen dann zugreifen können.
Ich bin mit beiden Lösungen ziemlich unzufrieden. Kennt denn jemand einen Weg, das gewünschte Verhalten zu bewerkstelligen?
Also nochmal kurz: jede Unterklasse von 'Item' soll quasi eine eigene Klassenvariable 'vererbt' bekommen, auf die dann von jeder 'Item'-(Unterklassen-)Instanz aus zugegriffen werden kann (am besten so: String itemName = new Torch().getName() --> "Fackel").
Vielleicht ist es mit einer Membervariablen wirklich am besten und ich bilde mir Unsinn ein...