实现了接口的非抽象枚举类是抽象的还是非抽象的?解决问题

//定义接口

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修饰。)

答疑:抽象类中可以有非抽象方法,接口中必须都是抽象方法。

猜你喜欢

转载自blog.csdn.net/u012187684/article/details/81607903