本帖最后由 聂峰 于 2012-7-26 22:53 编辑
举例子:枚举中可以用抽象方法,但是枚举中的每一个对象都分别实现抽象方法;而且枚举还可以实现接口,在实现接口的时候覆写接口的抽象方法就可以了。
public class Main{
public static void main(String[] args) {
TraLight r = TraLight.RED;
TraLight t = r.Nextlight();
System.out.println(t);
System.out.println(r);
}
}
//输出:
green color
RED RED RED
enum TraLight {
RED ("red color"){//括号里是使用构造方法时传递的实参
public TraLight Nextlight() {
return GREEN;
}
public String toString(){//再次重写toString方法。
return "RED RED RED";
}
},
GREEN ("green color"){
public TraLight Nextlight() {
return YELLOW;
}
},
YELLOW ("yellow color"){
public TraLight Nextlight() {
return RED;
}
};
private TraLight(String s){//构造方法,必须是私有的,只能内部调用,当在外部使用TraLigh r = TraLighr.RED;时,内部会执行此构造方法,并传进相应的参数。
this.s = s;
}
public String toString(){//重写toString方法
return s;
}
public abstract TraLight Nextlight();//此为抽象方法,子类必须实现
private String s;
}
//enum是特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法。代码编译之后成了一个字节码文件:TraLight.class。
//下面是其字节码文件,可以看出来其本身就是一个抽象类。
Compiled from "TraLight.java"
abstract class TraLight extends java.lang.Enum{
public static final TraLight RED;//TraLight类型
public static final TraLight GREEN;
public static final TraLight YELLOW;
public static TraLight[] values();
public static TraLight valueOf(java.lang.String);
public java.lang.String toString();
public abstract TraLight Nextlight();
TraLight(java.lang.String, int, java.lang.String, TraLight$1);
static {};
}
//枚举值RED\GREEN\YELLOW是枚举类TraLight的一个子类,所以必须实现其抽象方法。
|