枚举类
枚举类是一种特殊的类,能够拥有普通类有的一切数据(变量,方法,实现接口,构造器),需要注意的是一个JAVA文件只能定义一个 **public **枚举类
枚举类通过enum来修饰
枚举类不能直接通过 new关键字来实现,需要创建一个class类来实现枚举,就像接口一样
public class enUmts {
public static void main(String[] args){
/*
虽然枚举类在被传入到实现类的方法调用时
传入的直接时实现类的名称
但是在主类被调用的时候依然需要输入完整的地址
enumts1.Fall
*/
new real().judge(enumts1.Fall);
/*
枚举类中还自带了一个values()方法
用于返回枚举类中的实例
*/
for(enumts1 et :enumts1.values()){
System.out.println(et);
}
}
}
//枚举关键字enum用法于class,interface差不多
enum enumts1{
//列出枚举实例
Spring,Summer,Fall,Winter;//逗号相隔,分号结束
}
//创建一个类来实现枚举类
class real{
public void judge(enumts1 et){
switch (et){
case Spring:
System.out.println(1);
break;
case Summer:
System.out.println(2);
break;
case Fall:
System.out.println(3);
break;
case Winter:
System.out.println(4);
break;
}
}
}
枚举类的实例只能是 枚举值,枚举类中的实例变量不能直接通过枚举类的名字.变量名,来访问
enum enumts1{
//列出枚举实例
Spring,Summer,Fall,Winter;//逗号相隔,分号结束
public String favoutie;//枚举类中可以定义实例变量
}
public class enUmts {
public static void main(String[] args){
enumts1 et1 = enumts1.valueOf(enumts1.class,"Fall");
et1.favoutie = "秋天";
System.out.println(et1 + et1.favoutie);
}
}
枚举实例的表现
以Fall为例子,每一个枚举实例都包含一个实例变量
public class enunmts2 {
public static void main(String[] args){
sex s = sex.valueOf("FEMALE");
s.setSex("女");
System.out.println(s + s.getSex());
}
}
enum sex{
MAN,FEMALE;
private String sex;//防止其他位置的程序访问枚举类中的变量
//直接在枚举类中定义一个方法规定只能在特定的实例输入特定的数据
public void setSex(String sex) {
//直接使用this来代替枚举实例
switch (this){
case MAN:
if(sex.equals("男")){
this.sex =sex;
}
else {
System.out.println("错误");
return;
}
break;
case FEMALE:
if(sex.equals("女")){
this.sex = sex;
}
else
{
System.out.println("错误");
return;
}
break;
}
}
//返回设置的变量
public String getSex() {
return sex;
}
}
枚举类引用构造器
public class enumts3 {
public static void main(String[] args){
Gender G = Gender.valueOf(Gender.class,"MALE");//对G枚举值赋值"MALE"
System.out.println(G);
}
}
enum Gender{
MALE(1),FEMALE(2);
private int sex;
//枚举类的构造器只能使用private来修饰
private Gender(int sex){
this.sex = sex;
}
public int getSex() {
return sex;
}
}
枚举类调用接口
前面说到,枚举类可以被当作一个特殊的类,拥有普通类的特性,那么枚举类同样能调用接口
public class enumts3 {
public static void main(String[] args){
System.out.println(Genderinter.ADD.eval(5,6));//像调用类方法那样调用枚举类中枚举实例中的方法
System.out.println(Genderinter.TIMES.eval(5,6));
}
}
interface enuminter{
public int eval(int a,int b);
}
enum Genderinter implements enuminter{
//为每一个枚举变量定义行为
TIMES{
public int eval(int a, int b){
return a * b;
}
},
ADD {
public int eval(int a, int b){
return a + b;
}
}
}