枚举类 enum(单例设计模式)

本文介绍了Java中如何使用枚举类型实现接口并重写方法,展示了枚举类作为单例设计模式的应用。枚举类DirectionEnum实现了DirectionInterface接口,并为每个枚举对象提供了不同的show()方法。同时,文章还演示了枚举对象的获取、比较以及遍历调用方法等操作。
摘要由CSDN通过智能技术生成

枚举值就是当前类的类型,也就是指向本类的对象,默认使用public static final关键字共同修饰,因此采用枚举类型.的方式调用。

DirectionEnum.DOWN

 

枚举实现接口如下:

枚举类实现接口后需要重写抽象方法,

而重写方法的方式有两种:重写一个,或者每个对象都重写。

public enum DirectionEnum implements DirectionInterface {

    // 声明本类类型的引用指向本类类型的对象

    // 匿名内部类的语法格式:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };

// public static final Direction UP = new Direction("向上") { 方法的重写 };

下面的UP只是简化写法

    UP("向上") {

        @Override

        public void show() {

            System.out.println("贪吃蛇向上移动了一下!");

        }

    }, DOWN("向下") {

        @Override

        public void show() {

            System.out.println("贪吃蛇向下移动了一下!");

        }

    }, LEFT("向左") {

        @Override

        public void show() {

            System.out.println("左移了一下!");

        }

    }, RIGHT("向右") {

        @Override

        public void show() {

            System.out.println("右移了一下!");

        }

    };

 

    private final String desc; // 用于描述方向字符串的成员变量

    // 通过构造方法实现成员变量的初始化,更加灵活

    // 私有化构造方法,此时该构造方法只能在本类的内部使用

    private DirectionEnum(String desc) { this.desc = desc; }

    // 通过公有的get方法可以在本类的外部访问该类成员变量的数值

    public String getDesc() {

        return desc;

    }

    // 整个枚举类型只重写一次,所有对象调用同一个

    /*@Override

    public void show() {

        System.out.println("现在可以实现接口中抽象方法的重写了!");

    }*/

}

 

枚举类可以自定义构造方法,但是构造方法的修饰符必须是private,默认也是私有的。

public class DirectionEnumTest {

 

    public static void main(String[] args) {

 

        // 1.获取DirectionEnum类型中所有的枚举对象

        DirectionEnum[] arr = DirectionEnum.values();

        // 2.打印每个枚举对象在枚举类型中的名称和索引位置

        for (int i = 0; i < arr.length; i++) {

            System.out.println("获取到的枚举对象名称是:" + arr[i].toString());

            System.out.println("获取到的枚举对象对应的索引位置是:" + arr[i].ordinal()); // 和数组一样下标从0开始

        }

        System.out.println("---------------------------------------------------------------");

        // 3.根据参数指定的字符串得到枚举类型的对象,也就是将字符串转换为对象

        //DirectionEnum de = DirectionEnum.valueOf("向下"); // 编译ok,运行发生IllegalArgumentException非法参数异常

        DirectionEnum de = DirectionEnum.valueOf("DOWN");

        //DirectionEnum de = DirectionEnum.valueOf("UP LEFT"); // 要求字符串名称必须在枚举对象中存在

        //System.out.println("转换出来的枚举对象名称是:" + de.toString());

        System.out.println("转换出来的枚举对象名称是:" + de); // 当打印引用变量时,会自动调用toString方法

        System.out.println("---------------------------------------------------------------");

        // 4.使用获取到的枚举对象与枚举类中已有的对象比较先后顺序

        for(int i = 0; i < arr.length; i++) {

            // 当调用对象在参数对象之后时,获取到的比较结果为 正数

            // 当调用对象在参数对象相同位置时,则获取到的比较结果为

            // 当调用对象在参数对象之前时,则获取到的比较结果为 负数

            System.out.println("调用对象与数组中对象比较的先后顺序结果是:" + de.compareTo(arr[i]));//比较下标

        }

}

// 5.使用数组中每个DirectionEnum对象都去调用show方法测试

        for (int i = 0; i < arr.length; i++) {

            arr[i].show();

        }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值