一、接口的继承 :
Java中不支持多继承,因为创建的enum类以及继承了Java,long.Enum所以,enum类自然不能在继承。但是当我们新创建一个enum类的时候却可以同时实现一个或多个接口
enum CartoonCharacter implements Generator<CartoonCharacter>{
SLAPPY,SPANKY,PUNCHY,SILLY,BOUNCY,NUTTY,BOB
;
Random random=new Random();
@Override
public 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());
}
}
}