Не имеет смысла создавать внутренний (не статический) класс перечисления на уровне экземпляра - если экземпляры перечисления сами связаны с внешним классом, они нарушают гарантию перечисления -
например. если бы у вас было
public class Foo {
private enum Bar {
A, B, C;
}
}
Чтобы значения перечисления действовали как константы (psuedocode, игнорируя ограничения доступа)
Bar b1 = new Foo().A
Bar b2 = new Foo().A
b1 и b2 должны быть одинаковыми объектами.