什么是枚举类?
一个类的对象有限而且固定,比如季节类,他只有4个实例,这种实例有限而且固定的类,被称为枚举类
枚举类是一种特殊的类,使用enum定义
使用enum定义的枚举类默认继承了java.lang.Enum抽象类,因此枚举类不能显示继承其他父类
Enum源码
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
private final String name;
public final String name() { return name; }
private final int ordinal;
protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; }
//重写Object类的方法
public String toString() {
return name;
}
public final boolean equals(Object other) { return this==other; }
public final int hashCode() { return super.hashCode(); }
protected final Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); }
protected final void finalize() { }
}
使用枚举类注意事项?枚举类在定义的时候省略了 final/abstract extends Enum
1定义枚举类不得使用extends 枚举类隐式继承Enum抽象类,枚举子类可以使用Enum抽象类的方法,因此不可在继承其他类
2枚举类不能做父类 枚举类需要显示创建实例,因此实例必须给出抽象方法的重写。使用enum定义的枚举类默认会使用abstract/final修饰符,因此枚举类不能派生子类
(使用abstract/final修饰取决于枚举类中是否含有抽象方法)
3枚举类的构造器只能用private修饰
4枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类额永远都不能产生实例,实例用public static final 修饰
public final enum A extends Enum{
Spring,SUMMER,FALL,WINTER;
}
switch表达式可以使用枚举类
public void judge(A a){
switch(a){
case SPRING: break;
case SUMMER:break;
case FALL:break;
case WINTER:break;
}
}
枚举类的成员变量?方法?构造器?
枚举类的实例只能是枚举值,不是随意通过new来创建枚举类对象
枚举类可以有成员变量,但是枚举类应该设置成不可变类,因此推荐枚举类的成员变量都是用private final修饰
枚举类和普通类一样可以实现一个或多个接口
public enum Operation{
PLUS("+")//枚举实例PLUS ,成员变量+,为该枚举实例提供抽象方法的实现
{
public double eval(doublex,double y)
{
return x+y;
}
}
public abstract double eval(double x,double y);
}