枚举类:实现接口的枚举类
程序员文章站
2022-05-21 21:41:51
...
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(); } }
下一篇: 女医生教你如何正确地请病假