Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >实战总结 | Java 接口和抽象类的使用场景

实战总结 | Java 接口和抽象类的使用场景

作者头像
create17
发布于 2025-03-17 05:39:09
发布于 2025-03-17 05:39:09
7400
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是create17,见字如面。

最近总结一下开发过程中,用到的 Java 接口和抽象类的使用场景,希望能给大家带来一些帮助和启发,也鼓励大家评论区留言自己的见解哟!

一、接口&抽象类

1、接口(Interface)的意义:
  • 定义契约,这些方法是类必须要实现的。例如,一个List接口定义了 add(), remove(), get()等方法,确保所有的实现类如 ArrayList 和 LinkedList 都提供这些方法。
  • 支持多重继承。
  • 增强灵活性和扩展性:新的类只需要实现相关的接口。
  • 解耦代码:调用者只需要知道接口,而不需要关心具体的实现类。
2、抽象类(Abstract Class)的意义:

抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类中可以包含抽象方法和非抽象方法。抽象方法是没有实现的方法,必须在子类中被实现。抽象类的存在主要是为了让子类共享一些方法或属性,同时又要求子类必须实现某些方法。

  • 部分实现:抽象类可以包含具体方法(已经实现的方法)以及抽象方法(没有实现的方法)。这使得抽象类可以提供部分实现,供子类共享。例如,一个Animal抽象类可以包含一个move()方法的具体实现和一个抽象的sound()方法。
  • 代码复用:抽象类允许在多个子类之间共享代码,减少代码重复。具体子类可以直接继承抽象类的实现,或者根据需要重写方法。
  • 定义状态:抽象类可以包含实例变量,允许它们定义和维护状态。接口则不能包含实例变量。
  • 控制继承层次结构:使用抽象类可以更好地控制继承层次结构,确保所有子类都从一个共同的基类继承,可以在基类中集中管理共有功能。

二、场景示例

1、场景示例一:

我需要创建两个单例模式下的 mqtt 客户端(两客户端信息不同)。一般写法是,两份相同的代码,但 mqtt client 信息不一样。如果考虑复用的场景,我们可以使用接口 + 抽象类的方式去完成。

如下图所示:

  1. 创建 IMqttClient 接口,里面定义了三个必须要实现的方法。
  2. 然后创建 AbstractMqttClient 抽象类,实现了接口的三个方法,并定义了订阅、发送数据的方法,共享子类复用。
  3. 最后,创建了两个 MqttClient 实例,都继承了 AbstractMqttClient 提供的通用功能,无需重复实现连接、订阅、发布等通用逻辑,只需关注特定配置和扩展功能即可。
2、场景示例二:

两个实体类中,都有 emission 和 percent,现在要根据 emission 分别计算这两个实体类中 emission 占总量的 percent。希望能封装一个方法分别计算出这两个实体类的 percent。

如下图所示:

  1. 首先,创建 CarbonAccounting 抽象类,里面有两子类都有的 emission 和 percent 属性。
  2. 两个实体类继承 CarbonAccounting 抽象类
  3. 编写计算函数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private <T extends CarbonAccounting> void calculateAndSetEmissionPercent(List<T> list) {
    // 计算总排放
    float totalEmission = 0f;
    for (T vo : list) {
        if (vo.getEmission() != null) {
            totalEmission += vo.getEmission();
        }
    }

    // 进行百分比的计算并保留两位小数
    for (T vo : list) {
        if (vo.getEmission() != null && totalEmission > 0) {
            float percent = (vo.getEmission() / totalEmission) * 100;
            vo.setPercent(NumberUtil.round(percent, 2).floatValue());
        } else {
            vo.setPercent(0f);
        }
    }
}

上面方法的传参 List 泛型 T,继承于 CarbonAccounting,可以同时兼容 CarbonAccounting 的子类计算。如下图所示:

好了,本次分享就到这里了,欢迎大家在底部评论区留言自己的见解哟!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java中的抽象类
抽象类(Abstract Class)是Java中一个不能被直接实例化的类,它使用abstract关键字进行声明。抽象类可以包含抽象方法,也可以包含具体方法和变量。抽象类的主要目的是为了提供一个通用的模板,让其他子类根据这个模板进行扩展。
用户11397231
2024/12/10
1070
java中的抽象类
类、抽象类和接口的区别
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。
chenchenchen
2023/01/30
4800
07 接口和抽象类
比抽象类更加抽象的是接口,在接口中所有的方法都会被 public abstract 修饰。
acc8226
2022/05/17
3110
Java抽象类的概念和使用
在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象。从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象。甚至,你可以只给出方法的定义而不实现,由子类根据具体需求来具体实现。
用户7886150
2021/01/31
4070
【JAVA】抽象类和接口
定义一个类时常常需要定义一些成员方法用于描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如上期定义的 Animal类中的 shout()方法用于描述动物的叫声,但是不同的动物叫声也不相同,因此在 shout()方法中无法准确描述动物的叫声。
颜颜yan_
2022/12/18
8600
【JAVA】抽象类和接口
java的抽象类
在Java中,抽象类(Abstract Class)是一种不能被实例化的类,它的目的是为了被其它类继承和实现。与普通类不同,抽象类中包含了抽象方法(Abstract Method),这些方法没有具体的实现代码,而是留给具体的子类去实现。通过抽象类,可以定义一些通用的抽象方法,让其它类去实现,从而达到代码复用的目的。
堕落飞鸟
2023/04/03
4260
[PHP]抽象类和接口的区别
首先接口和抽象类的设计目的就是不一样的。接口是对动作的抽象,而抽象类是对根源的抽象。对于抽象类,比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类--人。对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,甚至可以学三哥一样用手抓着吃饭,那么可以把这些吃饭的动作抽象成一个接口--吃饭。所以在高级语言中(如Java,C#),一个类只能继承一个抽象类(因为你不可能同时是生物又是非生物)。但是一个类可以同时实现多个接口,比如开车接口,滑冰接口,踢足球接口,游泳接口。
唯一Chat
2021/02/25
4400
PHP中的 抽象类(abstract class)和 接口(interface)
1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。
PHP开发工程师
2021/06/01
8450
【JavaSE】Java入门七(抽象类和接口详解)
抽象类中可以包含被abstract修饰的抽象方法,抽象方法在抽象类中仅仅被声明,具体的实现代码可以在继承他的类中被实现。
小皮侠
2024/04/08
1900
【JavaSE】Java入门七(抽象类和接口详解)
接口和抽象类/方法学习 demo
抽象类:抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract,在抽象类中的成员方法可以包括一般方法和抽象方法
默 语
2024/11/20
440
【Java】抽象类和接口
2.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则编译器会报错,但如果子类也是抽象类,那么其子类可以不对父类中的抽象类进行重写
喜欢做梦
2024/11/25
1250
【Java】抽象类和接口
接口和抽象类的区别
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
唐怀瑟
2018/08/30
5800
【Java 学习】:抽象类&接口
💢💢在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
IsLand1314
2024/10/15
1660
【Java 学习】:抽象类&接口
接口和抽象的使用场景
接口和抽象的使用场景 抽象和接口的区别 总的来说,是抽象是为了代码复用,接口是为了解耦。 抽象 抽象类不允许被实例化,只能被基础,也就是说,不能 new 一个抽象类 抽象类可以包含方法和属性,方法可以包含实现,也可以不实现。不实现的方法叫做抽象方法 子类继承抽象,必须实现抽象类中的方法。 接口 接口不能包含属性 接口只能声明方法,方法不能包含代码实现 类实现接口的时候,必须实现接口中声明的所有方法。 抽象类说明的是 is-a 的关系,接口表示的是一种 Has-a 的关系。 抽象类和接口能解决什么问题?
王小明_HIT
2020/07/25
4160
搞了这么多年终于知道接口和抽象类的应用场景了
很多初学者都大概清楚interface是什么, 我们可以定义1个接口, 然后在里面定义一两个常量(static final) 或抽象方法.
yaphetsfang
2020/08/11
12.1K5
Java 中接口和抽象类的 7 大区别!
Java 是一门面向对象的编程语言,面向对象的编程语言有四大特征:抽象、封装、继承和多态。 而本文介绍的接口和抽象类就是面向对象编程中“抽象”的具体实现,也就是说接口和抽象类都是用来定义实体类的公共行为的,它们是对实体类(对象)更高层次的抽象。​
磊哥
2021/12/27
1.6K0
Java 中接口和抽象类的 7 大区别!
Java抽象类与接口详解
抽象类是一个包含抽象方法的类,它不能被实例化。抽象方法是一种没有方法体的方法,它只包含方法的签名。抽象类可以包含普通的方法,也可以包含抽象方法,而普通方法可以有方法体。
GeekLiHua
2025/01/21
1060
Java: Java中接口和抽象类的区别以及应用场景
在JAVA编程语言中是接口一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
Freedom123
2024/03/29
2480
抽象类 VS 接口
接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同。接下来,我们来了解二者的概念并比较它们的异同。
雪飞鸿
2018/09/05
4420
抽象类 VS 接口
【Java】接口和抽象类有什么共同点和区别?
在 Java 8 及以后的版本中,引入了默认方法(Default Methods) 的概念,允许在接口中使用 default 关键字为接口方法提供默认的实现。这样可以在不破坏现有代码的基础上向接口中添加新的方法,而不需要修改所有实现该接口的类。同样,抽象类也可以拥有具有默认实现的方法。
.29.
2024/01/04
1770
【Java】接口和抽象类有什么共同点和区别?
相关推荐
java中的抽象类
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验