package org.lgy.study.enumstudy;
public interface GenderDesc{
void info();
}
package org.lgy.study.enumstudy;
/*
枚举类也可以实现一个或多个接口,与普通类实现一个或多个接口完全一样。
枚举类实现一个或多个接口时,也需要实现该接口所包含的方法。
*/
public enum Gender implements GenderDesc{
MALE("男"),FEMALE("女");
private String sex;
private Gender(String sex){
this.sex = sex;
}
public void info(){
System.out.println(this + " " + sex);
}
}
package org.lgy.study.enumstudy;
/*
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式(因为方法体是一样的)。
如果需要每个枚举值在调用该方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,
每个枚举值提供不同的实现方式,从而让不同的枚举值调用该方法时具有不同的行为方式。
*/
public enum Gender implements GenderDesc{
/*
这种用法有点儿类似于匿名内部类,花括号部分实际上就是类体部分,我们也可以认为这是一个匿名内部类。
这个匿名内部类实现了本来改由枚举类实现的抽象方法,所以我们又可以认为这个匿名内部类是原来枚举类的一个匿名子类。
由于枚举类的实例默认使用public static final修饰,所以这个匿名类是一个静态的匿名类,
也就不能在这个匿名类里使用外部类的非静态成员。
在这种情况下,当创建MAEL、FEMALE枚举值时,并不是创建Gender枚举类的实例,
而是相当于创建Gender的匿名子类的实例。
*/
MALE("男")
{
public void info(){
System.out.println("MALE:");
//System.out.println(this + " " + sex);
}
},
FEMALE("女")
{
public void info(){
System.out.println("FEMALE:");
//System.out.println(this + " " + sex);
}
};
private String sex;
private Gender(String sex){
this.sex = sex;
}
/*
public void info(){
System.out.println(this + " " + sex);
}
*/
}
package org.lgy.study.main;
import org.lgy.study.enumstudy.*;
public class GenderMain{
public static void main(String[] args){
Gender g = Gender.MALE;
g.info();
g = Gender.FEMALE;
g.info();
}
}