Season spring = new Season("春天","温暖");
Season winter = new Season("冬天","寒冷");
Season autumn = new Season("秋天","凉爽");
Season summer = new Season("夏天","炎热");
/**
*这样不能体现季节是固定的四个对象
*如何让别人不能修改你的类呢?
*例如别人Season whiter = new Season(...)
*因此,这样的设计不好,所以可以用枚举类
*/
public class Enumeration01 {
public static void main(String[] args) {
System.out.println(Season.AUTUWN);
}
}
//演示自定义枚举实现
class Season{
private String name;
private String desc;
final public static SeasonSPRING= new Season("春天","温暖");
final public static SeasonWINTER= new Season("冬天","寒冷");
final public static SeasonAUTUWN= new Season("秋天","凉爽");
final public static SeasonSUMMER= new Season("夏天","炎热");
//1.构造器私有化,防止被new出来
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
//2.去掉set相关的方法,防止属性被修改,不过可以提供get
//3.在Season类内直接创建固定的对象
//4.final static修饰,优化
}
package _enum;
/**
*
*/
public class Enumeration01 {
public static void main(String[] args) {
System.out.println(Season.SPRING);
}
}
//演示自定义枚举实现
enum Season{
SPRING("春天","温暖"),WINTER("冬天","寒冷");
//1.用关键字enum来实现枚举类
//2。直接用SPRING("","");
//3.如果有多个常量对象,用逗号间隔
//4.如果用enum,常量对象要写在最前面。
//5.如果使用的是无参构造器创建常量对象,则可以省略小括号
private String name;
private String desc;
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
}
(base) wendy@WendydeMacBook-Pro javalesson2 % javap out/production/javalesson2/_enum/Season.class
Compiled from "Enumeration01.java"
final class _enum.Season extends java.lang.Enum<_enum.Season> {
public static final _enum.Season SPRING;
public static final _enum.Season WINTER;
public static _enum.Season[] values();
public static _enum.Season valueOf(java.lang.String);
static {};
}

默认调用无参构造器,但是第二个因为没有无参构造器了,所以不行的

BOY、GIRL是static的,所以boy、boys指向的是同一个

//测试这些方法
package _enum;
public class E2 {
public static void main(String[] args) {
//toString被重写了,返回他的名字
System.out.println(Gender.BOY);
Gender boy = Gender.BOY;
Gender boy2 = Gender.BOY;
//BOY是静态的,因此是同一个
System.out.println(boy==boy2);
//输出它对应的值,0,1,2……跟定义顺序有关
System.out.println(Gender.BOY.ordinal());
//把所有的枚举量放在一个数组里
Gender[] values = Gender.values();
for(Gender gender:values){
System.out.println(gender);
}
//字符串->枚举量
Gender man = Gender.valueOf("BOY");
System.out.println("++++++++");
System.out.println(man);
//他的ordinal作差
System.out.println(boy.compareTo(Gender.HI));
System.out.println(boy.compareTo(Gender.GIRL));
}
}
enum Gender{
BOY,GIRL,HI;
}
enum Gender2{
BOY,GIRL;
}
但是enum不能继承其他类了,因为已经继承了一个类!
@Override
如果写了这个方法,那么编译器就会去检查,如果重写了,则编译通过,如果没构成重写,则编译错误