一、枚举的理解
枚举其实就是一个类,枚举类的实例是一组限定的对象
二、传统的方式创建枚举 【了解】
对比:单例类
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:一个静态方法,将一个有效的字符串转换成枚举对象
四、枚举类如何实现接口【掌握】
特点:
- 和普通类实现接口一样,只是允许枚举常量也有自己对抽象方法的特有实现!
- 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;
}
}