Java 枚举:实现接口
http://blog.csdn.net/veryitman/article/details/7945949
所有的枚举类都继承自 Enum,因为 Java 不支持多继承,所以枚举无法继承其它类。
但是,枚举与普通类一样,可以实现接口。
- 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 接口:
- interface Paint {
- public void setColor();
- public void setType();
- }
枚举 Color 实现 Paint:
- 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 枚举:理解枚举本质 中说到,
枚举的常量值本质就是枚举对象,那么我们可以采用匿名内部类来解决这个问题!
- 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的多态性
Java 枚举:实现接口相关推荐
- java枚举类型原理_Java枚举类接口实例原理解析
这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一 ...
- Java 枚举enum 枚举的来由 枚举的常用方法 枚举的构造函数 枚举中的方法 枚举继承接口
Java5新增的特性,一种特殊的类型.本质上是一个类,但是有特殊的约束.这些约束让枚举更简洁.安全. 枚举本质是在一个常量集合,一个属于同一类型的常量集合.比如:四季(春夏秋冬).星期(一到七) 1. ...
- java 枚举 接口_java枚举接口
java中的枚举类 枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一 ...
- java 枚举的继承_java中枚举类可以被继承吗?
java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...
- java 枚举使用简书_Java枚举
1.简介 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: 枚举类继承了java.lang.Enum类,而不是默认的Object类.而java.l ...
- 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀
零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...
- Java枚举原来还能这么用
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 相信不少java开发者写过状态变更的业务,比如订单流程.请假流程等等.一般会搞一个状态 ...
- java 注解 enum_13 Java枚举和注解
Java枚举 在某些情况下,一个类的对象是有限而且固定的.例如季节类,只能有 4 个对象. 当类的对象是有限时,就应该使用枚举,而不使用普通类.(枚举对象是单例模式) 枚举的属性 实现接口的枚举类 例 ...
- java 枚举(enum) 详细用法
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
最新文章
- opencv学习笔记(二)
- 如何在SAP云平台上使用MongoDB服务
- java泛型函数 返回值_java 泛型(类)方法返回值为什么是 Object??
- cpld xilinx 定义全局时钟_AutoSAR中的时钟同步机制
- YAML配置:mapping values are not allowed here
- webGL简单例子(klayge)
- VTK:几何对象之ConvexPointSet
- lamp安全审计之php代码审计_paper,PHP实战开发及代码审计之PHP代码审计
- ASP连接11种数据库的常用语法
- git工作区和暂存区(4)
- CentOS7下EasyDarwin的安装搭建
- 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
- Cox比例风险回归(Cox ProportionalHazards Model) 到底选用哪种回归分析 r到底选择哪种回归分析 r选择生存分析还是cox分析
- DLP迈向NG DLP的进化之路
- 《奇葩说》救猫还是救画,我做了认真的分析
- 【Linux】关于Linux中的权限
- GIT 中如何打标签(git tag)
- AT命令拨电话,如何判断手机的状态?
- SourceTree生成密钥
- unbuntu下 sudo apt-get update 更新软件源列表
热门文章
- [Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割
- 【数据结构与算法】之深入解析“安装栅栏”的求解思路与算法示例
- SwiftUI之从前端视角看SwiftUI语言
- xdm,把我大学四年能用到的软件都分享给你。
- Spring Boot (一)Spring Boot 概述
- 【Git1】指令,分支,ssh免密登录
- 四元数姿态解算及多传感器融合详细解析
- 【Tools】Visual Studio 2019搭建Qt开发环境
- 【Linux】一步一步学Linux——wc命令(52)
- 【Linux】一步一步学Linux——dirname命令(35)