http://blog.csdn.net/veryitman/article/details/7945949

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

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

[java] view plaincopyprint?
  1. package mark.demo;
  2. public class EnumDemo {
  3. public static void main(String[] args) {
  4. for (Color color : Color.values()) {
  5. color.setColor();
  6. }
  7. }
  8. interface Paint {
  9. public void setColor();
  10. }
  11. public enum Color implements Paint {
  12. RED("red color", 0),
  13. GREEN("green color", 1),
  14. BLUE("blue color", 2),
  15. YELLOW("yellow color", 3);
  16. Color(String name, int id) {
  17. _name = name;
  18. _id = id;
  19. }
  20. private String _name;
  21. private int _id;
  22. public String getName() {
  23. return _name;
  24. }
  25. public int getId() {
  26. return _id;
  27. }
  28. // @Override
  29. // public String toString() {
  30. // return this._name.toUpperCase();
  31. // }
  32. @Override
  33. public void setColor() {
  34. System.out.println("Current paint color: " + _name);
  35. }
  36. }
  37. }

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

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

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

[java] view plaincopyprint?
  1. interface Paint {
  2. public void setColor();
  3. public void setType();
  4. }

枚举 Color 实现 Paint:

[java] view plaincopyprint?
  1. public enum Color implements Paint {
  2. RED("red color", 0),
  3. GREEN("green color", 1),
  4. BLUE("blue color", 2),
  5. YELLOW("yellow color", 3);
  6. Color(String name, int id) {
  7. _name = name;
  8. _id = id;
  9. }
  10. private String _name;
  11. private int _id;
  12. public String getName() {
  13. return _name;
  14. }
  15. public int getId() {
  16. return _id;
  17. }
  18. // @Override
  19. // public String toString() {
  20. // return this._name.toUpperCase();
  21. // }
  22. @Override
  23. public void setColor() {
  24. System.out.println("Current paint color: " + _name);
  25. }
  26. @Override
  27. public void setType() {
  28. System.out.println("Current paint type: " + "How to determine??");
  29. }
  30. }

把这个问题具体化:

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

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

....

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

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

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

[java] view plaincopyprint?
  1. package mark.demo;
  2. public class EnumDemo {
  3. public static void main(String[] args) {
  4. for (Color color : Color.values()) {
  5. color.setColor();
  6. color.setType();
  7. }
  8. }
  9. interface Paint {
  10. public void setColor();
  11. public void setType();
  12. }
  13. public enum Color implements Paint {
  14. RED("red color", 0) {
  15. @Override
  16. public void setColor() {
  17. System.out.println("Current paint color: " + RED._name);
  18. }
  19. @Override
  20. public void setType() {
  21. System.out.println("Current paint type: " + "5");
  22. }
  23. },
  24. GREEN("green color", 1) {
  25. @Override
  26. public void setColor() {
  27. System.out.println("Current paint color: " + GREEN._name);
  28. }
  29. @Override
  30. public void setType() {
  31. System.out.println("Current paint type: " + "1");
  32. }
  33. },
  34. BLUE("blue color", 2) {
  35. @Override
  36. public void setColor() {
  37. System.out.println("Current paint color: " + BLUE._name);
  38. }
  39. @Override
  40. public void setType() {
  41. System.out.println("Current paint type: " + "12");
  42. }
  43. },
  44. YELLOW("yellow color", 3) {
  45. @Override
  46. public void setColor() {
  47. System.out.println("Current paint color: " + YELLOW._name);
  48. }
  49. @Override
  50. public void setType() {
  51. System.out.println("Current paint type: " + "80");
  52. }
  53. };
  54. Color(String name, int id) {
  55. _name = name;
  56. _id = id;
  57. }
  58. private String _name;
  59. private int _id;
  60. public String getName() {
  61. return _name;
  62. }
  63. public int getId() {
  64. return _id;
  65. }
  66. }
  67. }

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

推荐一篇博客:小谈Java Enum的多态性

Java 枚举:实现接口相关推荐

  1. java枚举类型原理_Java枚举类接口实例原理解析

    这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一 ...

  2. Java 枚举enum 枚举的来由 枚举的常用方法 枚举的构造函数 枚举中的方法 枚举继承接口

    Java5新增的特性,一种特殊的类型.本质上是一个类,但是有特殊的约束.这些约束让枚举更简洁.安全. 枚举本质是在一个常量集合,一个属于同一类型的常量集合.比如:四季(春夏秋冬).星期(一到七) 1. ...

  3. java 枚举 接口_java枚举接口

    java中的枚举类 枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一 ...

  4. java 枚举的继承_java中枚举类可以被继承吗?

    java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...

  5. java 枚举使用简书_Java枚举

    1.简介 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: 枚举类继承了java.lang.Enum类,而不是默认的Object类.而java.l ...

  6. 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀

    零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...

  7. Java枚举原来还能这么用

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 相信不少java开发者写过状态变更的业务,比如订单流程.请假流程等等.一般会搞一个状态 ...

  8. java 注解 enum_13 Java枚举和注解

    Java枚举 在某些情况下,一个类的对象是有限而且固定的.例如季节类,只能有 4 个对象. 当类的对象是有限时,就应该使用枚举,而不使用普通类.(枚举对象是单例模式) 枚举的属性 实现接口的枚举类 例 ...

  9. java 枚举(enum) 详细用法

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

最新文章

  1. opencv学习笔记(二)
  2. 如何在SAP云平台上使用MongoDB服务
  3. java泛型函数 返回值_java 泛型(类)方法返回值为什么是 Object??
  4. cpld xilinx 定义全局时钟_AutoSAR中的时钟同步机制
  5. YAML配置:mapping values are not allowed here
  6. webGL简单例子(klayge)
  7. VTK:几何对象之ConvexPointSet
  8. lamp安全审计之php代码审计_paper,PHP实战开发及代码审计之PHP代码审计
  9. ASP连接11种数据库的常用语法
  10. git工作区和暂存区(4)
  11. CentOS7下EasyDarwin的安装搭建
  12. 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
  13. Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
  14. DLP迈向NG DLP的进化之路
  15. 《奇葩说》救猫还是救画,我做了认真的分析
  16. 【Linux】关于Linux中的权限
  17. GIT 中如何打标签(git tag)
  18. AT命令拨电话,如何判断手机的状态?
  19. SourceTree生成密钥
  20. unbuntu下 sudo apt-get update 更新软件源列表

热门文章

  1. [Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割
  2. 【数据结构与算法】之深入解析“安装栅栏”的求解思路与算法示例
  3. SwiftUI之从前端视角看SwiftUI语言
  4. xdm,把我大学四年能用到的软件都分享给你。
  5. Spring Boot (一)Spring Boot 概述
  6. 【Git1】指令,分支,ssh免密登录
  7. 四元数姿态解算及多传感器融合详细解析
  8. 【Tools】Visual Studio 2019搭建Qt开发环境
  9. 【Linux】一步一步学Linux——wc命令(52)
  10. 【Linux】一步一步学Linux——dirname命令(35)