千家信息网

java枚举的实现以及接口的定义

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"java枚举的实现以及接口的定义",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java枚举的实现以及接口的定义"吧!目录前言示例枚
千家信息网最后更新 2025年11月08日java枚举的实现以及接口的定义

这篇文章主要讲解了"java枚举的实现以及接口的定义",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java枚举的实现以及接口的定义"吧!

目录
  • 前言

  • 示例

    • 枚举实现

      • 接口定义

      • 实现

    • 常规多实现(调用示例)

      • 业务场景

      • 接口定义

      • 实现

      • 应用


前言

多继承的目的是为了提高子类的功能,扩展性得到了提高。

为了扩充子类的功能,java改良成多实现。这里带来两个问题,多实现就没有不确定性问题了么?接口中都是抽象方法,实现多实现结构还要重写,意义大么?

第二个问题,就是在于要重写方法,而多实现解决的是让实现的子类具备一些功能,至于重写函数的麻烦不在考虑的范围之内。那么第一个不确定性问题呢?

多继承不支持,是因为方法的不确定性,声明相同,方法体不同,子类在继承执行相同的方法时,不知道执行哪个方法体。毛病出现在方法体上。禁止使用多继承,就是为了预防出现这样的问题。但是接口中定义的全是抽象方法,在多个继承的时候(说法不正确,要说成实现,但是本质还是继承覆盖),即使碰到相同的函数,也没关系,因为里面没有方法体,要执行的方法体是子类的自己重写,压根不会产生要执行多个不同的方法体的选择问题。而且,我认为多接口中,根本不会出现相同的方法,因为,编写的时候是从上往下的书写的。只是在最初在理解的时候,是从下往上的,可能要遇到这些问题。多继承不执行,也有父类中有一般函数,不是抽象函数的问题。不是说子类多继承几个父类不行,有一些情况也是可以的,但是为了预防出现的问题,所以禁止它了。

接口是给子类提高了一些功能,告诉子类你可以具备哪些功能,至于怎么实现这些功能,需要子类自己书写。

Java中的接口类通常是为了提取共同点,规范实现,便于阅读,处理好接口类多实现并提供优雅的命中具体实现,能够帮助我们简化代码,提高可读性;下面介绍几种用起来很舒服的多实现方式及调用方式供大家参考。

示例

枚举实现

接口定义
public interface Breakfast {    void eat();}
实现
public enum BreakfastEnum implements Breakfast {    Beijing("北京") {        @Override        public void eat() {            System.out.println("北京人早餐吃豆汁和焦圈");        }    },    Wuhan("武汉") {        @Override        public void eat() {            System.out.println("武汉人早餐吃热干面、豆皮...");        }    },    Unknown("未知") {        @Override        public void eat() {            System.out.println("不吃早餐!");        }    };    private String city;    BreakfastEnum(String city) {        this.city = city;    }    private String getCity() {        return this.city;    }    /**     * 提供统一入口 找到对应子类并执行     *     * @param city     */    public static void eat(String city) {        BreakfastEnum[] values = BreakfastEnum.values();        Arrays.stream(values).filter(e -> city.equals(e.city)).findFirst().orElse(Unknown).eat();    }}

测试一下

通过枚举类实现接口,每一个枚举相当于一个实现,在代码块实现方法即可,最后在枚举类提供一个静态方法作为统一入口,调用方便,代码简洁,提供通用实现处理无特定实现的场景,适合用于替换ifelse较多的业务代码,优化复杂的工具类等等,对于方法很多,业务复杂的业务慎用。

常规多实现(调用示例)

业务场景

我们有一个消息服务用于监听消息并发送到客户端,消息中有一个发布方式字段

1.根据消息的发布方式字段发送到指定途径

2.将消息发到所有途径

接口定义
public interface MessageHandle {    /**     * 发布消息     *     * @param msg     */    void publish(JSONObject msg);}
实现
/** * 发送短信 */@Service("sms")public class SmsMessageHandle implements MessageHandle {    @Override    public void publish(JSONObject msg) {        // 发送短信        // 省略实现...    }}/** * 推送 */@Service("push")public class PushMessageHandle implements MessageHandle {    @Override    public void publish(JSONObject msg) {        // 推送到app        // 省略实现...    }}
应用
// 1.指定途径发送@Componentpublic class MessageListener {    @Autowired    private Map messageHandleMap;        @KafkaListener(groupId = "message-server", topics = "message")    public void listener(String message, Acknowledgment ack) {        JSONObject messageJson = JSON.parseObject(message);        // 获取发布方式 sms push...对应实现@Service注解中的名称        String publishType =  messageJson.getString("publishType");        // 获取实现        MessageHandle handle = messageHandleMap.get(publishType);        if(handle != null) {            handle.publish(messageJson);        }        // 提交偏移量        ack.acknowledge();    }     }
// 2.每种途径都发送@Componentpublic class MessageListener {    @Autowired    private List messageHandleList;        @KafkaListener(groupId = "message-server", topics = "message")    public void listener(String message, Acknowledgment ack) {        JSONObject messageJson = JSON.parseObject(message);        // 每种途径都发送        for(MessageHandle handle : messageHandleList){            handle.publish(messageJson);        }        // 提交偏移量        ack.acknowledge();    }     }

感谢各位的阅读,以上就是"java枚举的实现以及接口的定义"的内容了,经过本文的学习后,相信大家对java枚举的实现以及接口的定义这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

接口 方法 子类 问题 功能 消息 业务 方式 途径 相同 代码 函数 示例 不确定性 场景 就是 早餐 时候 学习 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信息化软件开发大概费用 数据库最高成绩的学生怎么查询 地图定位软件开发 腾讯软件开发怎么样 前端h5页面部署在不同服务器 第三次全国国土调查数据库概况 办公管理软件开发语言 2008服务器安装教程 荒野行动连接不了服务器怎么办 怎样创建远程连接数据库 计算机服务器冷却液龙头上市公司 网络安全答案清华大学出版社 乡镇开展网络安全宣传周活动 珠海软件开发商 荷兰ugg服务器 查询数据库权限oracle 服务器添加材质包 武清区国家网络安全宣传周 数据库自动备份工具源码 杭州服务器机房空调安装 在手机里创建数据库 东时互联网科技怎么样 我的世界服务器房间号练习 山西文档软件开发免费咨询 数据库左右连接练习题 学法减分数据库 刘卫明深圳市名威网络技术 国旗下情景剧表演网络安全 怎么把自己的服务器变成2b2t 易安联网络技术有限公司工资
0