[Clase de enumeración de Java] La clase de enumeración definida por la palabra clave enum implementa la interfaz

Clase Enum que implementa la interfaz.

1. Al igual que las clases ordinarias de Java, las clases de enumeración pueden implementar una o más interfaces

2. Si cada valor de enumeración presenta el mismo comportamiento al llamar al método de interfaz implementado, solo es necesario implementar el método de manera uniforme.

3. Si necesita que cada valor de enumeración se comporte de manera diferente al llamar al método de interfaz implementado, puede dejar que cada valor de enumeración implemente el método por separado

================================================== =======================

Caso 1: implementar la interfaz e implementar el método abstracto en la clase de enumeración
public class SeasonTest01 {
    public static void main(String[] args) {
        Season1 winter = Season1.valueOf("WINTER");
        System.out.println(winter);
        winter.show();
    }
}
interface Info{
    void show();
}
//使用enum关键词枚举类
enum Season1 implements Info{
    //1.提供当前枚举类的多个对象,多个对象之间用“,“隔开,末尾对象";"结束
    SPRING ("春天","春暖花开"),
    SUMMER ("夏天","夏日炎炎"),
    AUTUMN ("秋天","秋高气爽"),
    WINTER ("冬天","冰天雪地");


    //2.声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;

    //3.私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }


    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public void show() {
        System.out.println("这是一个季节");
    }

    //4.其他诉求1:提供toString()
//    @Override
//    public String toString() {
//        return "Season1{" +
//                "seasonName='" + seasonName + '\'' +
//                ", seasonDesc='" + seasonDesc + '\'' +
//                '}';
//    }
}

Si queremos que show() sea llamado por cada objeto para mostrar contenido diferente

Caso 2: Permita que los objetos de la clase de enumeración implementen los métodos abstractos en la interfaz respectivamente

public class SeasonTest01 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        //toString():
        System.out.println(summer);

        //System.out.println(Season1.class.getSuperclass());

        System.out.println("===================================");
        //values():
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);
            values[i].show();
        }

        System.out.println("=======================================");
        //valuesOf(String objName):返回枚举类中对象名是objName的对象
        //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
        Season1 winter = Season1.valueOf("WINTER");//WINTER1报错
        System.out.println(winter);
        winter.show();
    }
}
interface Info{
    void show();
}
//使用enum关键词枚举类
enum Season1 implements Info{
    //1.提供当前枚举类的多个对象,多个对象之间用“,“隔开,末尾对象";"结束
    SPRING ("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("春天在哪里");
        }
    },
    SUMMER ("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("宁静的夏天");
        }
    },
    AUTUMN ("秋天","秋高气爽"){
        @Override
        public void show() {
            System.out.println("秋天不回来");
        }
    },
    WINTER ("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("大约在冬季");
        }
    };


    //2.声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;

    //3.私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }


    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }


    //4.其他诉求1:提供toString()
//    @Override
//    public String toString() {
//        return "Season1{" +
//                "seasonName='" + seasonName + '\'' +
//                ", seasonDesc='" + seasonDesc + '\'' +
//                '}';
//    }
}

El resultado de la operación es el siguiente:

¡gracias por ver! !

Supongo que te gusta

Origin blog.csdn.net/qq_64976935/article/details/129540991
Recomendado
Clasificación