Java枚举enum关键字

枚举的理解

枚举其实就是一个类,枚举类的实例是一组限定的对象

传统的方式创建枚举 【了解】

对比:单例类

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;
    }
}

 

posted @ 2019-07-18 17:20  猫不夜行  阅读(2049)  评论(0编辑  收藏  举报