黑马程序员_java实现接口的枚举类---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完全一样,枚举类实现一个或多个接口时,也需要实现该接口所包含的方法。下面程序定义了一个A接口
public interface A
{
Void info();
}
在上面A接口中定义了一个info方法,下面的B枚举类实现了该接口。并实现了该接口里包含的info方法。下面是B枚举类的代码
public enum B implements A
{
public void info()
{
System.out.println("这是一个用于定义性别属性的枚举类");
}
}
枚举类实现接口与普通类完全一样:使用implements实现接口,实现接口里包含的抽象方法。
如果由枚举类来实现接口里的方法,则每个枚举类值在调用该方法时,都有相同的行为方式。如果需要每个枚举值在调用该方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式,从而让不同枚举值调用该方法时具有不同的行为方式,下面的B枚举类中,不同枚举值对info方法的实现则各不相同
public class B implements A
{
MALE("男");
{
public void info()
{
System.out.println("这个枚举值代表男性");
}
}
FEMALE("女");
{
public void info()
{
System.out.println("这个枚举值代表女性");
}
}
}
上面代码红体部分看起来有些奇怪:当我们创建MALE和FEMALE两个枚举值时,后面又紧跟了一对花括号,这对花括号里包含了一个info方法定义。或括号部分实际上就是一个类体部分,在这种情况系,当创建MALE.FEMALE枚举值时,并不是直接创建了A枚举类的实例,而是相当于创建A的匿名子类的实例。因为红体字括号部分实际上是一个匿名内部类的类体部分,所以这个部分的代码语法与前面介绍的匿名内部类语法大致相似只是它依然是枚举类的匿名内部子类。编译上面的程序,可以看到生成了A.class,A$1.class和A$2.class三个文件,这样三个class文件正好证明了上面的结论:MALE和FEMALE实际上是A匿名子类的实例,而不是A类的实例。这样,我们调用MALE和FEMALE两个枚举值的方法时,就会看到两个枚举值的方法表现不同的行为方式。---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------