Java枚举类

来源:互联网 发布:扩展欧几里得算法公式 编辑:程序博客网 时间:2024/04/28 19:19

1.枚举类可以实现一个或多个接口,用enum关键字定义枚举类,默认继承java.lang.Enum类,而不是继承Object类,其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

2.枚举类的构造器只能用private访问控制符,不管是省略还是默认或者强制指定访问控制符,都必须是private。

3.枚举类的所有实例必须在类里显示列出,否则因为枚举类的构造器为private访问控制,而导致枚举类无法创建实例。这些实例默认public static final修饰,不需要显示添加。

4.所有枚举类都提供了一个values的方法,该方法可以方便的遍历所有枚举值。

5.实现接口的枚举类:

public interface GenderDesc{      void info();}public enum Gender implements GenderDesc{       MALE("nan"){              public void info(){                   System.out.printlin("this is male");              }        },         FEMALE("nv"){              public void info(){                   System.out.printlin("this is female");              }        };}
上面MALE、FEMALE枚举值不是Gender的实例,而是Gender的匿名子类的实例,编译源码会生成Gender.class、Gender$1.class、Gender$2.class三个class文件,说明MALE、FEMALE是Gender的匿名子类的实例。

6.包含抽象方法的枚举类:

public enum Operation{     PLUS{          public double eval(double x,double y){                return x+y;         }     },     MINUS{          public double eval(double x,double y){                return x-y;         }     },     TIMES{          public double eval(double x,double y){                return x*y;         }     },     DIVIDE{          public double eval(double x,double y){                return x/y;         }     };     public abstract double eval(doublex,double y);}
编译上面源码生成5个class文件,其中包括Operation以及四个匿名内部子类的class文件

枚举类里定义抽象方法时,无需显示用abstract关键字将枚举类定义成抽象类,但定义每个枚举值时必须为所有抽象方法提供实现。


0 0
原创粉丝点击