一、接口的继承 :
    Java中不支持多继承,因为创建的enum类以及继承了Java,long.Enum所以,enum类自然不能在继承。但是当我们新创建一个enum类的时候却可以同时实现一个或多个接口

    1. enum CartoonCharacter implements Generator<CartoonCharacter>{
    2. SLAPPY,SPANKY,PUNCHY,SILLY,BOUNCY,NUTTY,BOB
    3. ;
    4. Random random=new Random();
    5. @Override
    6. public CartoonCharacter next() {
    7. return values()[random.nextInt(values().length)];
    8. }
    9. }
    10. public class EnumImplementation {
    11. public static <T> void printNext(Generator<T> gen){
    12. System.out.println(gen.next()+" ");
    13. }
    14. public static void main(String[] args) {
    15. CartoonCharacter character=CartoonCharacter.BOB;
    16. for (int i = 0; i <10 ; i++) {
    17. printNext(character);
    18. }
    19. }
    20. }
    1. 上述程序中的enum类实现了一个Grenerator接口。并使用该接口中的next()方法,随机生成enum实例。

    二、使用接口组织枚举
    ①:通过在enum上实现一个接口,我们可据此对枚举元素进行分类组织的目的。

    1. public interface Food {
    2. enum Appetize implements Food{
    3. SALAD,SOUR,SPRING_ROLLS;
    4. }
    5. enum MainCourse implements Food{
    6. LASAGNE;
    7. }
    8. enum Dessert implements Food{
    9. TIRAMISU;
    10. }
    11. enum Coffee implements Food{
    12. TEA;
    13. }
    14. }
    15. class TestFood{
    16. public static void main(String[] args) {
    17. Food food = Food.Coffee.TEA;
    18. System.out.println(food);
    19. food= Food.Dessert.TIRAMISU;
    20. System.out.println(food);
    21. }
    22. }

    在接口的内部,通过实现food接口对每一个枚举都进行了分类,并且他们最终都属于Food接口。所以说我们在测试时候可以将其向上转型为food接口。
    ②:通过接口在枚举中创建枚举

    1. public enum Coure {
    2. Appetize(Food.Appetize.class),
    3. MainCourse(Food.MainCourse.class),
    4. Dessert(Food.Dessert.class),
    5. Coffee(Food.Coffee.class);
    6. private Food[] values;
    7. private Coure (Class<? extends Food> cal){
    8. values=cal.getEnumConstants();
    9. }
    10. public Food randomSelection(){
    11. return Enums.random(values);
    12. }
    13. }
    14. class Meal{
    15. public static void main(String[] args) {
    16. for (int i = 0; i < 5; i++) {
    17. for (Coure coure : Coure.values()) {
    18. Food food = coure.randomSelection();
    19. System.out.println(food);
    20. }
    21. System.out.println("================");
    22. }
    23. }
    24. }
    1. 通过构造器,使得每个Coureenum实例都传入对应的Class对象,并通过getEnumConstants()方法获得每一个Class对象的enum实例。这样便使得Coure中的每一个enum实例中包含着enum实例。我们可以根据次去随机生成一份菜单<br />**③:我也可以把枚举定以在枚举内部来管理枚举**
    1. public enum SecurityCategoty {
    2. STOCK(Secutiry.Stock.class);
    3. private Secutiry[] arrsys;
    4. SecurityCategoty(Class<? extends Secutiry> clas){
    5. arrsys=clas.getEnumConstants();
    6. }
    7. public Secutiry randomSelection(){
    8. Secutiry random = Enums.random(arrsys);
    9. return random;
    10. }
    11. interface Secutiry {
    12. enum Stock implements Secutiry {SHORT, LONG, MARGIN}
    13. enum Bond implements Secutiry {MUNICPAL, JUNK;}
    14. }
    15. public static void main(String[] args) {
    16. for (SecurityCategoty value : SecurityCategoty.values()) {
    17. System.out.println(value.randomSelection());
    18. }
    19. }
    20. }