一、接口的继承 :
Java中不支持多继承,因为创建的enum类以及继承了Java,long.Enum所以,enum类自然不能在继承。但是当我们新创建一个enum类的时候却可以同时实现一个或多个接口
enum CartoonCharacter implements Generator<CartoonCharacter>{SLAPPY,SPANKY,PUNCHY,SILLY,BOUNCY,NUTTY,BOB;Random random=new Random();@Overridepublic CartoonCharacter next() {return values()[random.nextInt(values().length)];}}public class EnumImplementation {public static <T> void printNext(Generator<T> gen){System.out.println(gen.next()+" ");}public static void main(String[] args) {CartoonCharacter character=CartoonCharacter.BOB;for (int i = 0; i <10 ; i++) {printNext(character);}}}
上述程序中的enum类实现了一个Grenerator接口。并使用该接口中的next()方法,随机生成enum实例。
二、使用接口组织枚举
①:通过在enum上实现一个接口,我们可据此对枚举元素进行分类组织的目的。
public interface Food {enum Appetize implements Food{SALAD,SOUR,SPRING_ROLLS;}enum MainCourse implements Food{LASAGNE;}enum Dessert implements Food{TIRAMISU;}enum Coffee implements Food{TEA;}}class TestFood{public static void main(String[] args) {Food food = Food.Coffee.TEA;System.out.println(food);food= Food.Dessert.TIRAMISU;System.out.println(food);}}
在接口的内部,通过实现food接口对每一个枚举都进行了分类,并且他们最终都属于Food接口。所以说我们在测试时候可以将其向上转型为food接口。
②:通过接口在枚举中创建枚举
public enum Coure {Appetize(Food.Appetize.class),MainCourse(Food.MainCourse.class),Dessert(Food.Dessert.class),Coffee(Food.Coffee.class);private Food[] values;private Coure (Class<? extends Food> cal){values=cal.getEnumConstants();}public Food randomSelection(){return Enums.random(values);}}class Meal{public static void main(String[] args) {for (int i = 0; i < 5; i++) {for (Coure coure : Coure.values()) {Food food = coure.randomSelection();System.out.println(food);}System.out.println("================");}}}
通过构造器,使得每个Coure的enum实例都传入对应的Class对象,并通过getEnumConstants()方法获得每一个Class对象的enum实例。这样便使得Coure中的每一个enum实例中包含着enum实例。我们可以根据次去随机生成一份菜单<br />**③:我也可以把枚举定以在枚举内部来管理枚举**
public enum SecurityCategoty {STOCK(Secutiry.Stock.class);private Secutiry[] arrsys;SecurityCategoty(Class<? extends Secutiry> clas){arrsys=clas.getEnumConstants();}public Secutiry randomSelection(){Secutiry random = Enums.random(arrsys);return random;}interface Secutiry {enum Stock implements Secutiry {SHORT, LONG, MARGIN}enum Bond implements Secutiry {MUNICPAL, JUNK;}}public static void main(String[] args) {for (SecurityCategoty value : SecurityCategoty.values()) {System.out.println(value.randomSelection());}}}
