抽象类、比较器和接口

news2024/12/29 2:29:59

一.抽象类

1.抽象类的概念:如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。(图例说明:)

2.抽象方法的概念:当一个方法被abstract来修饰,此时代表着这个方法可以不进行实现,此时的方法就成为抽象方法。

3.抽象类:如果一个类当中,包含抽象方法,此时这个类就必须是抽象类。但是没有抽象方法,这个类也可以写为抽象类。

4.当不能描述一个具体的对象的时候,这个类可以被定义为抽象类。

5.抽象类中定义的成员和普通类没有区别。

6.抽象类不可以被实例化,所以抽象类是为了被继承。

7.当一个普通类继承这个抽象类之后,必须重写抽象类当中的抽象方法。

8.抽象类也可以发生多态:

9.此时抽象方法也要满足重写的条件。(被final 或者 static 或者 private修饰的方法不能重写的)

10.当一个普通类A继承了一个抽象类,不想重写这个这个抽象类的方法,此时可以把普通类A改为抽象类,但是如果抽象类A被普通类B继承了,那么B中就要重写A继承的抽象类中的方法和A中抽象的方法。

二.接口(实现某种功能)

1.概念:多个类的公共规范。

2.定义接口使用关键字interface。

3.接口当中的成员变量默认为public static final修饰的,所以定义的时候必须初始化。(这里的public static final也是可以省略的)

4.接口当中的方法默认是public abstract修饰的。(抽象方法是没有具体实现的)

5.接口当中使用default和static修饰的方法可以具体实现。(test3也是可以重写的只是没有进行演示)

6.接口和抽象类一样不能被实例化。        

7.接口需要被类实现,需要使用关键字implements实现(implements就是让类实现接口)

8.当一个类实现了一个接口,那么这个类就要重写这个方法。

9.接口可以发生向上转型,也可以发生动态绑定,也可以发生多态。

10.接口当中不能有静态代码块 实例代码块 和 构造方法。

11.接口虽然不是类,但是编译完成之后字节码文件的后缀格式也是.class。

12.实现多个接口:

13.接口解决了多继承的问题: (若需要继承父类需要先extends再implements)

14.这里还可以让使用者忘记类型,有了接口就可以不用关注具体类型,而只关注某个类是否具有这个功能。

15.接口也可以使用extends来扩展:

16.用接口来完成引用数据类型的比较:(要重写Comparable中的方法)

17.字符串的比较大小要用compareTo:(这里的compareTo和上述重写的compareTo不一样)

18.Compareble接口有局限性,一旦这个类写死了一种比较方式,后期就不能随意进行更改。

三.Clonable接口(任何一个类默认都是继承于Object类的)

1.由于要使用Object中的clone方法是protected,那么这个访问修饰限定符是最多只能在不同包的子类中访问的。所以我们只能通过super来访问它的克隆方法。

2.在自定义类中重写一个clone方法:

3.这里保存是因为这是调用的Object这个父类的方法,所以这里需要向下转型。        

4.还报错的原因是异常的这个原因,这个在后面异常课件中讲解。

5.正确的话就是这样的:

6.代码正确但是运行报错:

7.解决方法是必须一个克隆的接口:

8.这个接口为什么没有抽象方法:(在我们使用这个接口的时候都没有重写方法)

9.因为此时这个接口叫做空接口或者标记接口。当这个接口被实现了,才能证明有被克隆这个功能。

10.克隆示意图:

四.比较器

1.比较器的实现:(年龄比较器)

2.比较器中也有要重写的方法:

3.比较器这个类中有了这个功能后的重写方法:

4.比较器的用法:(先实例化比较器的类对象,在通过比较器的类来调用重写的方法,传入引用就可以进行比较)

五.Arrays.sort方法和比较器联动

1.这是Arrays.sort里面的参数,目前先简单的理解为可以传入一个数组和一个Comparator

2.使用自己的Comparator来排序:

3.此时我们把nameComparator传入Arrays.sort中时,就是发生了向上转型,使排序使通过我们重写的compare进行的。这里就发生了动态绑定。

六.深浅拷贝

1.浅拷贝:

浅拷贝会通过克隆过的对象来改变原来的数据。

2.深拷贝:在上述的浅拷贝中,money的值会被克隆后的对象进行修改,是因为在拷贝之后试student2中克隆过来的是age=10和m中存储money的地址。m的地址又指向了money就与student1中的m中存储的money的地址是一样的。所以在student2中修改money的值也会把student1中的money的值改变。所以就需要让m也进行一次克隆,也就是深拷贝了。

3.深拷贝的实现:首先我们需要让money类和student类一样来实现接口,才能使用克隆。

然后我们在student的类中来克隆m。(因为其中调用clone都是Object类中的方法,所以需要调用父类的方法,然后我们这里是通过子类来调用父类的方法,那么就是向下转型)

示意图:

七.接口和抽象类的区别

1.核心区别:抽象类中可以包含普通的字段和方法,在子类中可以被直接调用(不需要重写)。而接口中并不存在普通方法,每一个方法都是抽象方法,并且字段都是public static final修饰的,子类也必须重写接口中所有的抽象方方法。

2.图表:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽,你好啊,我是雷工! 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中; 02 抽象工厂组成 抽象工厂包括抽象产品(即业务接口,可以通过抽象类或抽象接口设计)…

WSL2Linux 子系统(十一)

WSL 网络改为桥接模式(默认NAT) 上一篇文章 《WSL2Linux 子系统(十)》 详细讲述 WSL(Windows Subsystem for Linux)WSL 显示画面的几种方法。本篇讲述 WSL 网络转为桥接模式的两种方法。 桥接模式允许 WSL 实例获得一个与宿主机在同一子网中…

【包教包会】CocosCreator3.x框架——音频声音模块(无需导入、无需常驻节点)

下载地址:AudioDemo3.x: CocosCreator3.x框架——音频模块 注意事项: 1、gi.musicPlay、gi.soundPlay是同步函数,使用前必须先将音频加载到缓存 Demo通过SceneLoading实现了一个极简的Loading页面,将音频全部加载后进入游戏&…

JAVA智慧社区系统跑腿家政本地生活商城系统小程序源码

智慧社区系统集成跑腿家政与本地生活商城 —— 打造便捷高效的社区生活圈 🏠 智慧社区新时代:一站式服务新体验 在快节奏的都市生活中,智慧社区系统正悄然改变着我们的生活方式。它不再只是一个居住的空间,而是集成了跑腿家政、本…

AI换脸技术新纪元:直播与视频创作的新利器

在数字媒体时代,实时面部交换技术正变得越来越流行。它不仅为视频创作者提供了新的表达方式,也为直播行业带来了革命性的变化。以下是一些目前市场上领先的实时面部交换软件: 🌟 FaceFusion FaceFusion 是一款功能强大的实时面部…

2023ICPC区域赛杭州站

VP链接:Dashboard - The 2023 ICPC Asia Hangzhou Regional Contest (The 2nd Universal Cup. Stage 22: Hangzhou) - Codeforces D. Operator Precedence 一道构造题,将序列构造成 1 2 -1 2 -1 ...... 2 -1 x。根据题目条件,可以推出来 x …

全新带货思路,用AI美女数字人做情感赛道,27天销量1559单

本期就另外分享一个全新的AI美女数字人带货思路,如果你正好对AI视频带货感兴趣,那么本期内容直接给你抹平“视频号上AI美女数字人玩法信息差”,最主要还是趁这类内容还不卷的时候,赶紧行动起来! 更多实操教程和数字人工…

智能AI对话绘画二合一网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 智能AI对话绘画二合一网站源码系统是一款基于先进的人工智能技术开发的综合性网站源码系统。该系统将AI对话功能和AI绘画功能完美融合,用户可以通过简单的对话指令,让系统生成符合要求的绘画作品,或者通过对话了解绘画相关的知识和…

世优科技出席36氪2024具身智能大会圆桌对话,入选创新应用案例

具身智能,作为人工智能领域的前沿分支,聚焦于构建能够通过集成感知与交互机制,在物理环境中实现动态适应与实时互动的智能系统及机器人平台。 9月26日,由36氪主办的“2024具身智能大会”以“让AI通向物理世界”为主题,…

Unity NetCode 客户端连接不上服务器,局域网模式 Failed to connect to server.

报错代码: Failed to connect to server. 报错截图: 解决办法: 服务端:绑定127.0.0.1和端口 客户端:写好对应服务端ip和端口 如何查看服务端所在局域网IP,192.xxx.xxx.xx,就不用教了吧。 注意这个钩,得点下,默认不勾选。 意…

【MYSQL】mysql约束---自增长约束(auto_increment)

1、概念 在Mysql中,当主键为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。 注意:自增长约束通常与主键放在一起使用。 通过给…

AutoGen框架进行多智能体协作—反思与提升博客文章质量(三)

1. 实践场景 两个代理之间通过互相反思以提升博客质量。其中一个代理作为修改意见提出者,另一个代理为写作者。写作者依据要求进行内容创作,评论员则提出修改要求,作者再根据要求对内容进行重新调整。 2. 代码实践 本节学习内容&#xff1a…

一文上手SpringSecurity【八】

RBAC(Role-Based Access Control),基于角色的访问控制。通过用户关联角色,角色关联权限,来间接的为用户赋予权限。 一、RBAC介绍 RBAC(Role-Based Access Control),即基于角色的访…

Unity实战案例全解析:RTS游戏的框选和阵型功能(3)生成范围检测框 +重置框选操作

前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(2) 生成选择框-CSDN博客 本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享,并未无师自通&…

UR学习记录

实践 示教器使用 外设使用 抓手,力传感器 开关、气动元件、电磁阀 示教器编写一个完整的抓取放置应用代码 使用示教器变量编写一个相对运动的应用代码 UR坐标表示计算 UR TCP/IP通讯 理论基础 齐次变换 python 矩阵计算,代码示例 import numpy as np…

Gromacs位置限制问题

Atom index n in position_restraints out of bounds A common problem is placing position restraint files for multiple molecules out of order.(一个常见的问题是无序放置多个分子的位置约束文件。)Recall that a position restraint itp (page 449) file containing a …

TDengine 签约国家电投旗下四大火力发电厂,助力汽轮机振动数据的有效管理

在火力发电厂中,汽轮机作为能量转换的核心设备,其稳定性直接关系到电力供应的可靠性和经济效益。因此,对汽轮机状态的监测与维护成为了发电厂日常经营中的重要工作。然而,传统的监测方式受到复杂运行环境和数据处理能力的限制&…

KA客户关系管理策略全解析

在当今商业竞争日益激烈的环境中,如何有效管理和维护关键客户关系成为企业制胜的关键。无论是初创企业还是跨国公司,都面临着同样的挑战,那就是如何通过精准的客户关系管理策略,不仅保留现有客户,还能不断拓展新的商业…

【Git原理与使用】Git初识基本操作

Git初识&&基本操作 1.初识Git2.Git安装3.Git基本操作3.1创建Git本地仓库3.2配置Git3.3认识工作区、暂存区、版本库3.4添加文件3.5修改文件3.6版本回退3.7撤销修改3.8删除文件 点赞👍👍收藏🌟🌟关注💖&#x1f…

大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…