Enums lassen sich nicht erweitern, sie können auch nicht von anderen Klassen erben. Das einzige, was möglich ist, ist ein Interface zu erweitern. Damit lässt sich auch eine Hierarchie realisieren, allerdings wird es dann im "erweiterten" Fall Essig mit den switch-statements (es lassen sich nicht enums von verschiedenen Typen in einem switch-Statement verwenden):
[code=Java]
interface Wertsachen {}
interface Geld extends WertSachen {}
enum Waehrung implements Geld {
EURO, DOLLAR, PFUND, YEN
}
enum Zeugs implements Wertsachen {
GOLD, SILBER, DIAMANTEN
}
List<Geld> geldList = new ArrayList<Geld>();
geldList.add(Waehrung.EURO); //OK
//FEHLER: geldList.add(Zeugs.GOLD);
List<Wertsachen> wertList = new ArrayList<Wertsachen>();
wertList.add(Waehrung.EURO); //OK
wertList.add(Zeugs.GOLD); //OK
[/code]
Alternativ kannst du natürlich statt einem Untertyp auch die Werte über eine Methode differenzieren (was natürlich nicht die feine OO-Art ist):
[code=Java]
enum Wertsachen {
EURO, DOLLAR, PFUND, YEN, GOLD, SILBER, DIAMANTEN;
public boolean isGeld() {
switch(this) {
case EURO: case DOLLAR: case PFUND: case YEN: return true;
default: return false;
}
}
}
[/code]