Enum in Java behaves like normal classes. So they can be abstract. In the case of abstract methods, enum entries need to define methods behaviour:
public class EnumTest { private static enum Names { MAN { @Override public String getName() { return "Denis"; } }, WOMAN { @Override public String getName() { return "Angelina"; } }; public abstract String getName(); } @Test public void should_correctly_get_abstract_enum_working() { assertThat(Names.MAN.getName()).isEqualTo("Denis"); assertThat(Names.WOMAN.getName()).isEqualTo("Angelina"); } }