2009-12-10 5 views
37

Можно создать дубликат:
add values to enumJava перечисление наследование

Почему перечисления в Java не может наследовать от других перечислений? Почему это реализовано таким образом?

+0

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

+3

Я бы перефразировал вопрос. Почему перечисления не могут иметь абстрактную базу? Принятый ответ на вопрос, цитируемый Биллом, объясняет, почему вы не можете расширять перечисления с другими значениями, но мне все еще не ясно, почему они не могут использовать базовую реализацию. –

ответ

78

Example stolen from here

Поскольку добавление элементов в перечисление бы эффективно создать супер класс, а не к югу от класса.

Рассмотрим:

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

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

Это обратная сторона, как она работает с регулярными классами. Я предполагаю, что может быть реализован именно так, но это было бы сложнее реализовать , чем казалось бы, и это было бы , конечно, путайте людей.

+2

Возможно, что вы хотите Первых орудий MyInterface Второго инвентаря MyInterface Затем используйте MyInterface для объединения двух групп – user1176505

+2

сначала а = Second.One быть незаконным заявление? –

+0

@TimothySwan Указанный код не будет скомпилирован, поскольку исключение будет выбрано в строке 'enum Second extends First {Three, Four}'. –