2009-12-10 3 views
37

Possible en double:
add values to enumJava héritage ENUM

Pourquoi énumérations Java ne peut hériter d'autres énumérations? Pourquoi cela est-il mis en œuvre de cette façon?

+0

http://stackoverflow.com/questions/55375/add-values-to-enum –

+3

Je voudrais reformuler votre question. Pourquoi les enums ne peuvent pas avoir une base abstraite? La réponse acceptée à la question citée par Bill explique pourquoi vous ne pouvez pas étendre des énumérations avec d'autres valeurs, mais je ne comprends toujours pas pourquoi ils ne peuvent pas partager une implémentation de base. –

Répondre

78

Example stolen from here

Parce que l'ajout d'éléments à un ENUM créerait effectivement une super classe, pas une sous-classe.

Tenir compte:

enum First {One, Two} 
enum Second extends First {Three, Four} 

First a = Second.Four; // clearly illegal 
Second a = First.One; // should work 

C'est l'inverse de la façon dont il fonctionne avec des classes régulières. Je suppose que pourrait être mis en œuvre de cette façon, mais il serait plus compliqué à mettre en œuvre que ce qu'il semble, et il certainement confondre les gens.

+2

Probablement ce que vous voulez est premier met en œuvre MyInterface deuxième outils MyInterface utilisent ensuite MyInterface pour l'union des deux groupes – user1176505

+2

Est-ce que d'abord a = Second.One être une déclaration illégale? –

+0

@TimothySwan Le code référencé ne sera pas compilé, car une exception sera lancée sur la ligne 'enum Second extends First {Three, Four}'. –