Java 枚举类

在C语言中枚举是使用int类型的一种特殊类型,可以使用int替代枚举。但是Java并非如此。Java是完全面向对象的语言,枚举也是。
Java的枚举是自动继承 java.lang.Enum类,但是不允许显式继承,它是由编译器自动完成的。声明枚举类不用关键字class,而是用enum。
枚举类型继承了java.lang.Enum类,并且自动声明为final,构造器为私有。同时所有的枚举类对象都是枚举类中所声明的,并且为public,static,final。编译器还会自动为枚举类生成两个public static方法:value与valueOf。因此,我们在枚举类中不能声明这两个方法。
我们可以自己定义一个枚举类的构造方法,但是在此构造器中不能访问枚举类中的任何对象。因为枚举类型在类的内部声明枚举类的对象,也就是每个枚举常量都是一个枚举对象,并且声明为public ,static,final。并且,枚举常量必须在枚举类的最前方声明。

package enumTest;

import java.util.ArrayList;
import java.util.List;

enum Vehicle {

    CARS, BUS, MOTOR;
    private static List<Vehicle> list = new ArrayList<>();
    Vehicle() {
        System.out.println("Vehicle构造器:" + this);
        //list.add(this);
    }
}

public class TestVehicle{
    public static void main(String[] args){
        Vehicle mVehicle;
        mVehicle = Vehicle.BUS;
    }
}

可以为枚举类中静态对象定义方法:

package enumTest;

enum EnumAnimal{
    CAT{
        public void act(){
            System.out.println("I am a cat");
        }
    },

    DOG{
        public void act(){

        }
    },

    PIG{
        public void act(){

        }
    };

    public abstract void act();
}//EnumAnimal

public class TestAnimal {

    public static void main(String[] args) {
        EnumAnimal mAnimal = EnumAnimal.CAT;
        mAnimal.act();

    }

}

你可能感兴趣的:(java)