枚举类

来源:互联网 发布:公司网站 php源代码 编辑:程序博客网 时间:2024/06/05 05:48
枚举类与普通类的简单区别
  • 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显式继承其他父类,其中java.lang.Enum类实现了java.langSerializable和java.lang.Comparable两个接口。
  • 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
  • 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private修饰符。
  • 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显式添加。
枚举类默认提供了一个values()方法,该方法可以很方便地遍历所有的枚举值。

例如:

public enum SeasonEnum{
          SPRING,SUMMER,FALL,WINTER;
}




所有的枚举类都继承了java.lang.Enum类,所以枚举类可以直接使用java.lang.Enum类中所包含的方法。java.lang.Enum类中提供了如下几个方法:
  • int compareTo(E o):该方法用于与指定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;如果该枚举对象位于指定枚举对象之前,则返回负整数,否则返回零。
  • String name():返回此枚举实例的名称,这个名称就是定义枚举类时列出的所有枚举值之一。与此方法相比,大多数程序员应该优先考虑使用toString()方法,因为toString()方法返回更加用户友好的名称。
  • int ordinal():返回枚举值在枚举类中索引值(就是枚举值在枚举声明中的位置,第一个枚举值的索引值为零。)
  • String toString():返回枚举常量的名称,与name方法相似,但toString()方法更常用.
  • public static<T extends Enum<T>> TvalueOf(Class<T>enumType,String name):这是一个静态方法,用于返回指定枚举类中指定名称的枚举值。名称必须与在该枚举类中声明枚举值时所用的标识符完全匹配,不允许使用额外的空白字符。




一旦为枚举类显式定义了带参数的构造器,列出枚举值时就必须对应地传入参数。

public enum Gender
{
     //此处的枚举值必须调用对应的构造器来创建。
     MALE("男"),FEMALE("女");
     private final String name;
     //枚举类的构造器只能使用private修饰
     private Gender(String name)
     {
          this.name=name;
     }
     public String getName()
     {
          return this.name;
     }
}


枚举类里定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(因为系统自动会为它添加abstract关键字),但因为枚举类需要显式创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现,否则将出现编译错误。
如下:

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(double x,double y);
     public static void main(String[] args)
     {
          System.out.println(Operation.PLUS.eval(3,4));
          System.out.println(Operation.MINUS.eval(5,4));
          System.out.println(Operation.TIMES.eval(5,4));
          System.out.println(Operation.DIVIDE.eval(5,4));
     }
}
0 0
原创粉丝点击