枚举类

参考文章:https://www.cnblogs.com/ygj0930/p/10843644.html
https://blog.csdn.net/qq_31024823/article/details/82789209

枚举的用法

  1. 简单的实例

注意点:
我们是先创建当前枚举对象的常量实例,再去添加我们的自定义属性和方法
RED(“红色”, 1)其实类似于public final static Color RED=new Color(“红色”,1)

public enum Color{
	//首先创建当前枚举的实例对象,等同于一个个new出来的静态常量
	RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); 
	
	//自定义成员变量
	private String name;
	private int index;
	
	// 定义构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }
	
	//get()和set方法
	。。。。
}
  1. 方便的使用在switch上
//定义枚举
enum Signal {  
    GREEN, YELLOW, RED  
}  

//测试
public class TrafficLight {  
    Signal color = Signal.RED;  

    public void change() {  
        switch (color) {  //使用枚举来作比较
        case RED:  
            color = Signal.GREEN;  
            break;  
        case YELLOW:  
            color = Signal.RED;  
            break;  
        case GREEN:  
            color = Signal.YELLOW;  
            break;  
        }  
    }  
}
  1. 如何进行抽象组织

其实,用enum关键字定义枚举类时,其实定义Enum类的子类,也就是说,我们定义的枚举类时继承自Enum类的
引申出的问题:java时不支持多继承的,如果多个枚举类有通用的行为时,如何进行抽象组织
答案:使用接口来完成,如下的代码

//定义接口
public interface Behaviour {  
    void print();  
    String getInfo();  
}  

//定义枚举类,实现接口
public enum Color implements Behaviour{  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;  
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //接口方法  
    @Override  
    public String getInfo() {  
        return this.name;  
    }  
    //接口方法  
    @Override  
    public void print() {  
        System.out.println(this.index+":"+this.name);  
    }  
}

枚举的实现

  1. 概括:虽然都是定义类,但是enum关键字和class关键字的约束行为不同,class定义的类,通过new操作创建对象,想new几个就几个,而enum关键字定义的类,其实例对象,只能在这个enum类中定义好,它的实例是有限的,限制了某些东西的范围。
  2. Java 枚举如何比较
    枚举实例可以使用 == 作比较,也可以 使用 equals() 作比较,二者结果一样,因为Enum类重写了 equals()方法,其实质还是使用 == 作比较的。

java枚举与常量类区别

优点

枚举相对于常量类来说定义更简单,其不需要定义枚举值,而常量类中的每个常量必须要手动添加值。
枚举作为参数使用时可以在编译时避免弱类型错误,而常量类中的常量作为参数使用时在编译时无法避免弱类型错误(譬如常量类型为 int,参数传递一个常量类中没定义的 int 值)。
枚举自动具备内置方法(如 values 方法可以获得所有值的集合来遍历,ordinal 方法可以获得排序值,compareTo 方法可以基于 ordinal 比较),而常量类默认不具备这些方法。

缺点

枚举的缺点就是不能被继承(编译后生成的类是 final class 的),也不能通过 extends 继承其他类(枚举类编译后实质就是继承了 Enum 类,Java 是单继承机制),但是定义的枚举类可以通过 implements 实现其他接口
枚举值定义完毕后除非修改重构,否则无法做扩展,而常量类可以随意继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值