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

Java 枚举:实现接口

2014-06-23 14:16 405 查看
/article/3653760.html

所有的枚举类都继承自 Enum,因为 Java 不支持多继承,所以枚举无法继承其它类。

但是,枚举与普通类一样,可以实现接口。

[java] view
plaincopyprint?

package mark.demo;

public class EnumDemo {

public static void main(String[] args) {

for (Color color : Color.values()) {

color.setColor();

}

}

interface Paint {

public void setColor();

}

public enum Color implements Paint {

RED("red color", 0),

GREEN("green color", 1),

BLUE("blue color", 2),

YELLOW("yellow color", 3);

Color(String name, int id) {

_name = name;

_id = id;

}

private String _name;

private int _id;

public String getName() {

return _name;

}

public int getId() {

return _id;

}

// @Override

// public String toString() {

// return this._name.toUpperCase();

// }

@Override

public void setColor() {

System.out.println("Current paint color: " + _name);

}

}

}

自定义接口 Paint,枚举 Color 实现该接口。



试想一下,为 Paint 选择 color 的同时是否可以指定 Paint 的类型呢?

那么,我们改造这个 Paint 接口:

[java] view
plaincopyprint?

interface Paint {

public void setColor();

public void setType();

}

枚举 Color 实现 Paint:

[java] view
plaincopyprint?

public enum Color implements Paint {

RED("red color", 0),

GREEN("green color", 1),

BLUE("blue color", 2),

YELLOW("yellow color", 3);

Color(String name, int id) {

_name = name;

_id = id;

}

private String _name;

private int _id;

public String getName() {

return _name;

}

public int getId() {

return _id;

}

// @Override

// public String toString() {

// return this._name.toUpperCase();

// }

@Override

public void setColor() {

System.out.println("Current paint color: " + _name);

}

@Override

public void setType() {

System.out.println("Current paint type: " + "How to determine??");

}

}



把这个问题具体化:

在选择 RED 的同时,我想选择类型为 5 号的 paint

在选择 GREEN 的同时,我想选择类型为 1 号的 paint,如何处理?

....

(这里只是为了说明枚举的功能,不是为了更好的找到解决上述问题的方法,请勿跑题!)

在前面的博客 Java 枚举:理解枚举本质 中说到,

枚举的常量值本质就是枚举对象,那么我们可以采用匿名内部类来解决这个问题!

[java] view
plaincopyprint?

package mark.demo;

public class EnumDemo {

public static void main(String[] args) {

for (Color color : Color.values()) {

color.setColor();

color.setType();

}

}

interface Paint {

public void setColor();

public void setType();

}

public enum Color implements Paint {

RED("red color", 0) {

@Override

public void setColor() {

System.out.println("Current paint color: " + RED._name);

}

@Override

public void setType() {

System.out.println("Current paint type: " + "5");

}

},

GREEN("green color", 1) {

@Override

public void setColor() {

System.out.println("Current paint color: " + GREEN._name);

}

@Override

public void setType() {

System.out.println("Current paint type: " + "1");

}

},

BLUE("blue color", 2) {

@Override

public void setColor() {

System.out.println("Current paint color: " + BLUE._name);

}

@Override

public void setType() {

System.out.println("Current paint type: " + "12");

}

},

YELLOW("yellow color", 3) {

@Override

public void setColor() {

System.out.println("Current paint color: " + YELLOW._name);

}

@Override

public void setType() {

System.out.println("Current paint type: " + "80");

}

};

Color(String name, int id) {

_name = name;

_id = id;

}

private String _name;

private int _id;

public String getName() {

return _name;

}

public int getId() {

return _id;

}

}

}



为了呈现不同的 Paint,枚举可以让其每个枚举值实现接口。

推荐一篇博客:小谈Java Enum的多态性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: