您的位置:首页 > 编程语言 > Java开发

java中枚举

2017-09-05 10:05 197 查看
在2005年之后增加了枚举,它的功能与多例设计模式基本上一样。在JAVA中用enum来定义一个类,相当于这个类继承了Enum类,Enum这个的构造方法是私有的,定义如下:

protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}


如何证明这个是Enum类的继承:

enum Color {
RED,GREEN,BLUE;
}

public class EnumTest {
public static void main(String[] args) {

for(Color color : Color.values()){
//ordinal()取得下标
System.out.println(color.ordinal() + "  " + color.name());
}
}
}


在上面的代码中,我们可以调用不是在Color中定义的方法ordinal()与name()的方法,说明用它们具有继承关系。

在多例设计模式中我们可以在类中定义方法与方法等,枚举也可以,但是有要求:

1 枚举中的定义的构造方法不能够使用public声明:

2 枚举对象必须放在道行,随后才可以定义属性、构造方法、普通方法。

扩充枚举:

package com.test;

enum Color {
//枚举对象必须定义在道行,自动调用对应的构造方法来初始化
RED("红色") , GREEN , BLUE("蓝色") ;
private String title ;	//属性

private Color() {
}
private Color(String title){	//不能使用public来定义构造方法
this.title = title ;
}

public String toString(){
return this.title ;
}
}


此时与多例设计模式操作方式完全相同,而且更加简单。

枚举实现接口:因为它可以看作是一个类,所以它可以像变通类那样来实现接口,这里不多介;我们现在在每一个对象后面使用匿名内部类的形式来实现接口:

package com.test;
interface Message {
public String getTitle();
}

enum Color implements Message {
// 枚举对象必须定义在道行,自动调用对应的构造方法来初始化
RED("红色") {

public String getTitle() {
return  this.toString();	//不能直接写this,因为this是一个对象,
}
},
GREEN {
public String getTitle() {
return this.toString();
}

},
BLUE("蓝色") {

public String getTitle() {
return this.toString();
}
};

private String title; // 属性

private Color() {
}

private Color(String title) { // 不能使用public来定义构造方法
this.title = title;
}

public String toString() {
return this.title;
}
}


枚举中定义抽象方法:

package com.test;

enum Color{
// 枚举对象必须定义在道行,自动调用对应的构造方法来初始化
RED("红色") {

public String getTitle() {
return  this.toString();	//不能直接写this,因为this是一个对象,
}
},
GREEN {
public String getTitle() {
return "" + this;
}

},
BLUE("蓝色") {

public String getTitle() {
return "" + this;
}
};
private String title; // 属性

private Color() {
}

private Color(String title) { // 不能使用public来定义构造方法
this.title = title;
}

public String toString() {
return this.title;
}
//定义抽象方法
public abstract String getTitle();
}


它的实现与使用匿名内部类的形式来实现接口差不多,还是每个单独实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息