package com.michael.jdk15;
/*
* jdk1.5新特性之 -- 枚举
* 使用:某些方法的接收的数据必须是固定范围内的,比如星期、性别、方向、季节等,这时候解决方案就是自定义一个类
* 然后私有化构造函数,在自定义类中构造本类的对象。
*
* 解决方法二:
* 枚举类:
* 1. 枚举类也是一个特殊的类;
* 2. 枚举值默认的修饰符是public static final
* 3. 枚举值是枚举值所属的类的数据类型。
* 4. 枚举类的构造方法修饰符默认是private
* 5. 枚举类可以定义自己的成员变量和函数;
* 6. 枚举类可以定义构造函数,但是修饰符必须是private
* 7. 枚举类可以存在抽象的方法,但是枚举值必须实现抽象的方法:
* 8. 枚举值必须要位于枚举位于枚举类的第一个值:
*
* Switch使用的数据类型:byte/char/short/int/String/枚举类型
* 注意:在case语句中的枚举值不需要声明值属于那个枚举类的
*
*/
class Gender{
String value;
String name;
private Gender sex;
private Gender(String value){
this.value = value;
}
public static final Gender man = new Gender("男");
public static final Gender woman = new Gender("女");
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Gender getSex(){
return sex;
}
public void setSex(Gender sex){
this.sex = sex;
}
}
enum Sex{
man("男"){
public void run(){
System.out.println("男人在跑");
}
},woman("女"){
public void run(){
System.out.println("女人在跑");
}
};//枚举类型
//相当于:public static final Sex man = new Sex();
// public static final Sex woman = new Sex();
String value;
private Sex(String value){
this.value = value;
}
public String getValue(){
return this.value;
}
abstract public void run();
}
enum Season{
spring,summer,autumn,winter;
}
public class Demo5 {
public static void main(String[] args){
Sex sex = Sex.man;
sex.run();
sex = Sex.woman;
sex.run();
Season season = Season.spring;
switch(season){
case spring:
System.out.println("春天");
break;
case summer:
System.out.println("夏天");
break;
case autumn:
System.out.println("秋天");
break;
case winter:
System.out.println("冬天");
break;
}
}
}