//定义接口
public interface GenderDesc{
void info();
}
//第1种实现方式。由枚举类本身实现接口包含的方法。
public enum Gender1 implements GenderDesc{
MALE("男"),FEMALE("女");
private final String name;
private Gender (String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void info(){
System.out.println("这是一个用于定义性别的枚举类。");
}
}
//第2种实现方式。由枚举类的每个枚举值分别实现接口包含的方法。
public enum Gender2 implements GenderDesc{
MALE("男"){
public void info(){
System.out.println("这个枚举值代表男性。");
}
},
FEMALE("女"){
public void info(){
System.out.println("这个枚举值代表女性。");
}
};
private final String name;
private Gender (String name){
this.name = name;
}
public String getName(){
return this.name;
}
//在这里,下面这个是合法的吗?也就是我提的问题里这个时候枚举类本身还需要实现接口吗?
//public void info(){
//System.out.println("这是一个用于定义性别的枚举类。");
// }
//在这里,下面这个是合法的吗?这个时候枚举类本身如果不需要实现接口了,这个抽象方法需要保留吗?
//public void info();
}
问题是:
1.第2种实现方式的枚举类此时是抽象的还是非抽象的?也就是说上面的Gender2枚举类此时是抽象的还是非抽象的?
2.第2种实现方式时枚举类本身还需要实现接口吗?不需要的话,抽象方法需要保留吗?
3.第2种实现方式此时创建的实例是谁的?书上说是Gender2 匿名子类的实例,不是Gender2 的实例。那Gender2 此时应该是抽象的,不然它怎么匿名派生子类呢?(非抽象的枚举类默认使用final修饰,抽象的枚举类默认用abstract修饰。)
答疑:抽象类中可以有非抽象方法,接口中必须都是抽象方法。