1、枚举中定义属性
- 枚举类对象的属性不应允许被改动, 所以应该使用 private final修饰。不是语法要求,而是语义要求。
- 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
- 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
package com.enumtype.before15;
public class TestWeekField {
public static void main(String[] args) { Week w = Week.MONDAY; System.out.println(w); } } enum Week{ MONDAY(“星期一”), TUESDAY(“星期二”), WEDNESDAY(“星期三”), THURSDAY(“星期四”), FRIDAY(“星期五”), SATURDAY(“星期六”), SUNDAY(“星期日”); private final String DESCRPTION;
private Week(String dESCRPTION) { DESCRPTION = dESCRPTION; } public String toString(){ return DESCRPTION; } } |
2、枚举类可以自定义方法,静态和非静态
3、枚举类可以实现一个或者多个接口(了解)
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
interface Change{ void degenerate(); } interface Checkable{ void check(); } enum Gender implements Change,Checkable{ MAN{ public void degenerate(){ System.out.println(“咔嚓一刀”); } },WOMAN{ public void degenerate(){ System.out.println(“比较复杂”); } }; public void check(){ System.out.println(“脱光”); } } |
4、枚举类可以自己定义抽象方法(了解)
enum Payment{ CASH{ public void pay(){ System.out.println(“现金支付”); } }, WECHAT{ public void pay(){ System.out.println(“微信支付”); } }, ALIPAY{ public void pay(){ System.out.println(“支付鸨支付”); } }, CARD{ public void pay(){ System.out.println(“银行卡支付”); } }, CREDIT{ public void pay(){ System.out.println(“信用卡支付”); } }; public abstract void pay(); } |
5 关于枚举的拓展
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。
上一篇: 给刚从事前端开发出人员的6点建议
下一篇: 尚硅谷JavaSE课程进阶第8章之元注解