枚举的理解
枚举其实就是一个类,枚举类的实例是一组限定的对象
传统的方式创建枚举 【了解】
对比:单例类
1、构造器私有化
2、本类内部创建对象
3、通过public static方法,对外暴露该对象
枚举类
1、构造器私有化
2、本类内部创建一组对象,添加public static修饰符,直接暴露对象
/** * 此类用于演示使用传统的方式创建枚举 * 步骤 * 1、构造器私有化 2、本类内部创建一组对象,添加public static final修饰符,直接暴露对象 */ public class TestEnum1 { public static void main(String[] args) { //引用枚举类的对象 System.out.println(Season.SPRING); System.out.println(Season.SUMMER); }//简单示例2:提供有参构造 class Season{ private String name;//季节名称 private String description;//季节描述 //2.本类内部创建一组对象,添加public static修饰符,直接暴露对象 public static final Season SPRING = new Season("春天","春风又绿江大南"); public static final Season SUMMER = new Season("夏天","接天莲叶无穷碧"); public static final Season AUTUMN = new Season("秋天","霜叶红于二月花"); public static final Season WINTER = new Season("冬天","千树万树梨花开"); //1、构造器私有化 private Season(String name, String description) { super(); this.name = name; this.description = description; } public String getName() { return name; } public String getDescription() { return description; }
@Override public String toString() { return "Season [name=" + name + ", description=" + description + "]"; } }
使用enum关键字定义枚举【掌握】
引入:jdk5.0出现的新特性
【特点】
1、使用enum关键字代替class关键字
2、对象(常量)的创建必须放在枚举类中的第一句
【语法】
对象名(实参列表), 对象名(实参列表);
3、如果是无参构造,则无参构造的定义和实参列表都可以省略
/** * 此类用于演示使用enum关键字定义枚举类【掌握】 * 引入:jdk5.0出现的新特性 * 特点: * 1、使用enum关键字代替class关键字 * 2、对象(常量)的创建必须放在枚举类中的第一句 * 语法: * 对象名(实参列表),对象名(实参列表); * 3、如果是无参构造,则无参构造的定义和实参列表都可以省略 * */ public class TestEnum2 { public static void main(String[] args) { //引用枚举类的对象 //示例1: System.out.println(Gender2.GIRL); //示例2: System.out.println(Season2.SUMMER); } } enum Season2{ //2.本类内部创建一组对象,添加public static修饰符,直接暴露对象 SPRING("春天","春风又绿江大南"), SUMMER ("夏天","接天莲叶无穷碧"), AUTUMN ("秋天","霜叶红于二月花"), WINTER("冬天","千树万树梨花开"); private String name; private String description; //1、构造器私有化 private Season2(String name, String description) { this.name = name; this.description = description; } public String getName() { return name; } public String getDescription() { return description; } } //简单示例1:使用无参构造器:枚举常量 enum Gender2{ BOY,GIRL; }
介绍枚举类的常见方法【了解】
toString:Enum类已经重写过了,返回的是当前对象的常量名。自定义的枚举类可以继续重写该方法
name:Enum类中的name方法返回的是当前对象的常量名(同toString),但自定义的枚举类不可以继续重写该方法
values:一个静态方法,用于返回指定的枚举类中的所有枚举常量
valueOf:一个静态方法,将一个有效的字符串转换成枚举对象
枚举类如何实现接口【掌握】
特点:
1. 和普通类实现接口一样,只是允许枚举常量也有自己对抽象方法的特有实现!
2. enum类不能再继承其他类,因为已经隐式的直接继承了Enum类
语法:
enum A implements 接口1,接口2{ 常量1(参数){ //抽象方法的实现 },常量2(参数){ //抽象方法的实现 } //类对抽象方法的实现 }
示例:
/** * 此类用于演示枚举类实现接口 * * 特点: * 1.和普通类实现接口一样,只是允许枚举常量也有自己对抽象方法的特有实现! * 2.enum类不能再继承其他类,因为已经隐式的直接继承了Enum类 * 语法: * enum A implements 接口1,接口2{ * 常量1(参数){ * //抽象方法的实现 * * },常量2(参数){ * * //抽象方法的实现 * } * //类对抽象方法的实现 * } * */ public class TestEnum4 { public static void main(String[] args) { Show s = Color4.RED; s.display(); Color4.BLACK.display(); } } interface Show{ void display(); } enum Color4 implements Show{ RED(255,0,0){ public void display(){ System.out.println("我是红色"); } }, BLUE(0,0,255){ public void display(){ System.out.println("我是蓝色"); } }, BLACK(0,0,0){ public void display(){ System.out.println("我是蓝色"); } }, YELLOW(255,255,0){ public void display(){ System.out.println("我是黄色"); } }, GREEN(0,255,0){ public void display(){ System.out.println("我是蓝色"); } }; private int redValue; public int getRedValue() { return redValue; } public int getGreenValue() { return greenValue; } public int getBlueValue() { return blueValue; } private int greenValue; private int blueValue; private Color4(int redValue, int greenValue, int blueValue) { // 构造器 this.redValue = redValue; this.greenValue = greenValue; this.blueValue = blueValue; } }