Java 基础知识33(枚举类Enum)

Java基础知识 33

枚举类

枚举类的对象是有限且固定的。使用enum关键字定义。

枚举是一种特殊的类:

(1)枚举类可以实现一个或多个接口,不能显示的继承其他父类。因为使用enum定义的枚举类默认继承了java.long.Enum类,java.long.Enum实现了Comparable,Serializable两个接口。

(2)使用Enum定义,非抽象的枚举类默认使用final修饰符,因此枚举类不能派生子类。

(3)枚举类的构造器只能用private访问控制符,默认为private。

(4)枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类不能产生实例。这些实例系统将自动加上public static final 来修饰。

(5)一个Java源文件最多只能定义一个public访问权限的枚举类,且源文件名称和枚举类类名相同。

(6)枚举类默认提供一个values()方法,方便遍历所有的枚举值。

Enum两个属性:

name:表示当前枚举对象的名字

ordinal:枚举对象在类中的顺序(从0开始)

常用方法:

valueof():通过 给定的name获取对应的枚举对象

values():获取全部枚举对象------>返回一个枚举类型数组

compareTo():可以比较两个枚举对象

toString():没有final修饰,可以重写

enum 枚举类 它是一个抽象类,但是你不要写出abstract,Direction它本身就继承了enum,也是一个抽象类,不要显式的写出来。

public enum Direction {
    //枚举项
    //枚举类的第一行必须是枚举项,最后一个枚举项可以使用分号;结束
    BEFORE,AFTER,LEFT,RIGHT;
    String name;

    //枚举里面的构造方法,必须是私有private的,默认也是私有的
    Direction() {
    }
}

在switch中使用枚举

public class Mytest {
    public static void main(String[] args) {
        //自定义枚举,写法太繁琐,JDK1.5之后引入了一个关键字enum用来表示定义枚举
        Direction before = Direction.BEFORE;
        Direction after = Direction.AFTER;
        Direction left = Direction.LEFT;
        Direction right = Direction.RIGHT;
        //枚举默认重写了toString方法
        System.out.println(before.toString());
        System.out.println(after.toString());
        System.out.println(left.toString());
        System.out.println(right.toString());
        //JDK1.5之后,switch语句支持枚举类型
        switch (Direction.BEFORE){
            case BEFORE:
                System.out.println("前");
                break;
            case AFTER:
                System.out.println("后");
                break;
            case LEFT:
                System.out.println("左");
                break;
            case RIGHT:
                System.out.println("右");
                break;
        }
        if (Direction.RIGHT.toString().equals("RIGHT")){
            System.out.println("相匹配,进来了!");
        }
    }
}

包含抽象类的枚举类

枚举类定义抽象方法时,不能使用abstract关键字将枚举类定义成抽象类,因为系统会自动给加上abstract,因为枚举类需要显示的创建枚举值,而不是父类,所以每个枚举值必须为抽象方法提供实现。枚举类也可以有抽象方法,但是枚举项必须重写该方法。

//enum 枚举 枚举就是抽象的
public enum Direction {
    //枚举类
    BEFORE("前"){
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    },
    AFTER("后"){
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    },
    LEFT("左"){
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    },
    RIGHT("右"){
        @Override
        public void show(String name) {
            System.out.println(name);
        }
    };
    String name;
    //注意:枚举里面的构造方法默认就是私有的
    private Direction(String name){
        this.name=name;
    }
    //提供一个抽象方法
    public abstract void show(String name);
}

你可能感兴趣的:(枚举类,Enum,java)