您的位置:首页 > 其它

34、枚举详解

2016-05-28 10:41 351 查看
[b]知识点介绍[/b]
1、枚举可以实现一个或多个接口。枚举默认继承于java.lang.Enum类,而不是Object类。Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
2、使用enum定义、非抽象的枚举默认会使用final修饰,因此枚举不能派生子类

3、枚举类的构造器只能使用private访问控制符

4、枚举类的所有势力必须在枚举类的第一行显示列出

下面是一个简单的枚举应用

public class Test{
public static void main(String[] args) {
SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
System.out.println(e.name());
}
}

enum SessonEnum{
Spring,Summer,Fall,Winter;
}


枚举类的成员变量、方法和构造器

public class Hello {
public static void main(String[] args) {
SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
System.out.println(e.getName());
}
}

enum SessonEnum{
Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");
private  final String name;
private SessonEnum(String name){
this.name=name;
}
public String getName(){
return name;
}
}


实现接口的枚举

1、由枚举类来实现接口里的方法——所有枚举值实现接口都是调用方法都有相同的行为

interface SessonInfo{
void info();
}

enum SessonEnum implements SessonInfo {

Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");

private  final String name;
private SessonEnum(String name){
this.name=name;
}
public String getName(){
return name;
}
@Override
public void info() {
System.out.println("这里是公用接口的实现");

}
}

public class Test{
public static void main(String[] args) {
SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
SessonEnum summer=SessonEnum.Summer;
spring.info();
summer.info();
}
}


输出结果:

这里是公用接口的实现
这里是公用接口的实现

2、分别由每个枚举值来实现接口

interface SessonInfo{
void info();
}

enum SessonEnum implements SessonInfo {

Spring("春"){
@Override
public void info() {
System.out.println("这里是春季");
}
},Summer("夏"){
@Override
public void info() {
System.out.println("这里是夏季");
}

},Fall("秋"){
@Override
public void info() {
System.out.println("这里是秋季");
}
},Winter("冬"){
@Override
public void info() {
System.out.println("这里是冬季");
}
};

private  final String name;
private SessonEnum(String name){
this.name=name;
}
public String getName(){
return name;
}
}

public class Hello {
public static void main(String[] args) {
SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
SessonEnum summer=SessonEnum.Summer;
spring.info();
summer.info();
}
}


输出结果:

这里是春季
这里是夏季

枚举抽象类

假设有一个Operation枚举类,它的4个枚举值PLUS、MINUS、TIMES、DIVIDE分别代表加、减、乘、除4种运算,该枚举类需要定义一个eval()方法来完成计算

public class Test{
public static void main(String[] args) {
System.out.println("1+2="+Operation.PLUS.eval(1, 2));
System.out.println("5-3="+Operation.MINUS.eval(5, 3));
System.out.println("3*4="+Operation.TIMES.eval(3, 4));
System.out.println("10-2="+Operation.DIVIDE.eval(10, 2));
}
}

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{
@Override
public double eval(double x, double y) {
return x*y;
}
},
DIVIDE{
@Override
public double eval(double x, double y) {
return x/y;
}
};
public abstract double eval(double x,double y);
}


输出结果:

1+2=3.0
5-3=2.0
3*4=12.0
10-2=5.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: