java后端开发day23--面向对象进阶(四)--抽象类、接口、内部类

在这里插入图片描述
(以下内容全部来自上述课程)
在这里插入图片描述
在这里插入图片描述

1.抽象类

父类定义抽象方法后,子类的方法就必须重写,抽象方法在的类就是抽象类。

1.定义

  • 抽象方法
    共性的行为(方法)抽取到父类之后。由于每一个子类执行的内容是不一样的,
    所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法。

  • 抽象类
    如果一个类中存在抽象方法,那么该类就必须声明为抽象类

2.定义格式

  • 抽象方法
    public abstract 返回值类型 方法名(参数列表); (无{}方法体)

  • 抽象类
    public abstract class 类名{}

3.注意事项

  • 抽象类不能实例化(不能创建对象
  • 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类
  • 可以有构造方法(javabean里的方法)
    作用:当创建子类对象时,给属性进行赋值的。
  • 抽象类的子类:
    要么重写抽象中的所有抽象方法
    要么是抽象类

2.接口

接口就是一种规则,是对行为的抽象。
不是仅自己独有的能力可以定义为接口。
请添加图片描述

1.定义和使用

  • 接口用关键字interface来定义
    public interface 接口名{}

  • 接口不能实例化

  • 接口和类之间是实现关系,通过implements关键字表示
    public class 类名 implements 接口名{}

  • 接口的子类(实现类)
    要么重写接口中的所有抽象方法
    要么是抽象类

注意1:
接口和类的实现关系,可以但单实现,也可以多实现。
public class 类名 implements 接口名1,接口名2{}
注意2:
实现类还可以在继承一个类的同时实现多个接口。
public class 类名 extends 父类 implements 接口名1,接口名2{}

新建接口:
请添加图片描述

2.接口中成员的特点

1.成员变量
  • 只能是常量
  • 默认修饰符:public static final
2.构造方法

没有

3.成员方法
  • 只能是抽象方法
  • 默认修饰符:public abstract
  • JDK7以前:接口中可以定义有方法体的方法
  • JDK8的新特性:接口中可以定义有方法体的方法。
  • JDK9的新特性:接口中可以定义私有方法。

3.接口和类之间的关系

1.类和类的关系

继承关系,只能单继承,不能多继承,但是可以多层继承

2.类和接口的关系

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

3.接口和接口的关系

继承关系,可以单继承,也可以多继承
细节:如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法

4.多学三招

1.JDK8开始接口中新增的方法
  • JDK7以前:接口中只能定义抽象方法
  • JDK8的新特性:接口中可以定义有方法体的方法。(默认,静态)
  • JDK9的新特性:接口中可以定义私有方法。
1.默认方法
  • 允许在接口中定义默认方法,需要使用关键字default修饰
    作用:解决接口升级的问题。

接口中默认方法的定义格式:

  • 格式:public default 返回值类型 方法名(参数列表){ }
  • 范例:public default void show(){ }

接口中默认方法的注意事项:

  • 默认方法不是抽象方法,所以不强制重写。但是如果被重写,重写的时候去掉default关键字
  • public可以省略,default不能省略
  • 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
2.静态方法

允许在接口中定义定义静态方法,需要用static修饰

接口中静态方法的定义格式:

  • 格式:public static 返回值类型 方法名(参数列表){ }
  • 范例:public static void show(){ }

接口中静态方法的注意事项:

  • 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
  • public可以省略,static不能省略
3.JDK9新增的方法

接口中私有方法的定义格式:

  • 格式1:private 返回值类型 方法名(参数列表){ }
  • 范例1:private void show(){ }
  • 格式2:private static 返回值类型 方法名(参数列表){ }
  • 范例2:private static void method(){ }
2.接口的应用
  • 接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。
  • 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。
3.适配器设计模式

简单来说:设计模式就是各种套路
适配器设计模式:解决接口与接口实现类之间的矛盾问题。
当一个接口中抽象方法过多,但是我要使用其中一部分的时候,就可以用适配器设计模式。

书写步骤:

  • 编写中间类XXXAdapter。实现对应接口
  • 对接口中的抽象方法进行空实现
  • 让真正的实现类继承中间类,并重写需要用的方法
  • 为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰

3.内部类

类的五大成员:
属性、方法、构造方法、代码块、内部类

1.定义

在一个类的里面,再定义一个类。
内部类表示的事物是外部类的一部分
内部类单独出现没有任何意义
比如:汽车的发动机,人的心脏等

内部类的访问特点:

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象 (new一个)

2.分类

1.成员内部类(了解)

写在成员位置的。属于外部类的成员。
成员内部类可以被一些修饰符所修饰,比如:private、默认、protected、public、static等
在成员内部类里面,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量

获取成员内部类对象的两种方式:

  1. 外部类编写方法,对外提供内部类对象
  2. 直接创建
  3. 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  4. 范例:Outer.Inner oi = new Outer().new Inner();

内存图请添加图片描述

2.静态内部类(了解)

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象(new一个)

创建静态内部类对象的格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
调用非静态方法的格式:先创建对象,用对象调用
调用静态方法的格式:外部类名.内部类名.方法名();

3.局部内部类(了解)

将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
外界是无法直接使用的,需要在方法内部创建对象并使用(new一个)
该类可以直接访问外部类的成员,也可以访问方法内的局部变量

4.匿名内部类(掌握)

匿名内部类本质上就是隐藏了名字(只是不用自己起)的内部类。
可以写在成员位置,也可以写在局部位置。

细节:
包含了继承(类)或实现(接口),方法重写,创建对象。
整体就是一个类的子类对象或者接口的实现类对象。

使用场景:
当方法的参数是接口或者类时,
以接口为例,可以传递这个接口的实现类对象,
如果实现类只要使用一次,就可以用匿名内部类简化代码。
请添加图片描述
格式理解:(很牛,建议亲自去听)
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集,该数据集包含了3万多首来自Spotify API 的歌曲,共有23个特征。首先对数据集进行预处理,如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析,观察各变量的分布情况&…

梳理vite构建vue项目可选的配置和组件

梳理vite构建vue项目可选的配置和组件 💡 列举通过vite构建vue3项目时可能会使用到的配置和组件,在搭建项目初期可以提前规划,提高开发效率,后续会不断扩展… unplugin-vue-router 可以监听views文件夹中的文件变化&#xff0c…

密码学(哈希函数)

4.1 Hash函数与数据完整性 数据完整性: 检测传输消息(加密或未加密)的修改。 密码学Hash函数: 构建某些数据的简短“指纹”;如果数据被篡改,则该指纹(以高概率)不再有效。Hash函数…

ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机

最近还是想玩了下esp32,基于原来的开发板,看见佬做了一个语音识别的项目,通过这个语音识别可以控制LED开关和直流电机这些,详情可见视频(推荐)具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…

《Qt窗口动画实战:Qt实现呼吸灯效果》

Qt窗口动画实战:Qt实现呼吸灯效果 在嵌入式设备或桌面应用中,呼吸灯效果是一种常见且优雅的UI动画,常用于指示系统状态或吸引用户注意。本文将介绍如何使用Qt动画框架实现平滑的呼吸灯效果。 一、实现原理 利用Qt自带的动画框架来实现&…

数据库测试

TPCH 22条SQL语句分析 - xibuhaohao - 博客园 TPCH模型规范、测试说明及22条语句 - zhjh256 - 博客园 TPC-DS 性能比较:TiDB 与 Impala-PingCAP | 平凯星辰 揭秘Oracle TPC-H性能优化:如何提升数据库查询速度,揭秘实战技巧与挑战 引言 T…

《Kafka 理解: Broker、Topic 和 Partition》

Kafka 核心架构解析:从概念到实践 Kafka 是一个分布式流处理平台,广泛应用于日志收集、实时数据分析和事件驱动架构。本文将从 Kafka 的核心组件、工作原理、实际应用场景等方面进行详细解析,帮助读者深入理解 Kafka 的架构设计及其在大数据领域的重要性。 ​1. Kafka 的背…

Day11,Hot100(贪心算法)

贪心 (1)121. 买卖股票的最佳时机 第 i 天卖出的最大利润,即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…

STM32呼吸灯实验手册(TIM定时器)

一、实验目标 使用TIM定时器的PWM模式控制LED亮度实现LED渐亮渐灭的呼吸灯效果掌握HAL库的TIM配置方法 二、硬件准备 开发板:STM32F103C8T6LED模块:LED串联220Ω电阻两组USB-TTL调试器硬件连接 三、软件配置(STM32CubeMX) 打开…

51页精品PPT | 农产品区块链溯源信息化平台整体解决方案

PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…

python-leetcode-删除并获得点数

740. 删除并获得点数 - 力扣(LeetCode) 解法 1:动态规划(O(n) 时间,O(n) 空间) class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…

Grafana服务安装并启动

Grafana服务安装并启动 1、介绍2、下载Grafana3、解压缩文件4、启动Grafana服务5、增加数据源,填写Prometheus访问地址6、增加图表 1、介绍 Grafana是一个开源的可视化系统监控和警报工具包。 2、下载Grafana 介绍:Grafana是一个开源的可视化系统监控和警报工具包…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 (可视化的方式,后续会写一些) 3. Display 功能(显示方面的设置) bars 柱状图方式显示 lines(不选不会出功能) line width 线条的粗细 staircase 会让折…

react18自定义hook实现

概念:自定义 hook 是一种将组件逻辑提取到可复用函数中的方式,它允许你在多个组件中共享相同的状态和行为。自定义 hook 的本质上是一个普通的 JavaScript 函数,它可以使用 React 内部的 hook(如 useState、useEffect、useContext…

千峰React:函数组件使用(3)

多组态进行正确记忆 首先看这个代码 import { useState } from reactfunction App() {const [count, setCount] useState(0)const [count2, setCount2] useState(0)const [count3, setCount3] useState(0)const handleClick () > {setCount(count 1)}return (<div&…

xss-labs搭建及学习

搭建 搭建过程与一般的网站搭建差不多 参考资料 当出现这个界面就是成功了 学习 学习资料 xss概念理解&#xff1a;XSS跨站脚本攻击 xss常见标签&#xff1a;XSS常见触发标签 level1-直接打 这里提示payload长度为4查看一下源码 发现get传参name的值test插入了html里头&am…

网络安全审计员

在当今数字化时代&#xff0c;随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言&#xff0c;网络安全不仅关乎数据资产的安全&#xff0c;更与组织的声誉、客户信任乃至法律法规的遵从…

安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类

文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)

目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充&#xff1a;设置新建类/接…

京准电钟:NTP精密时钟服务器在自动化系统中的作用

京准电钟&#xff1a;NTP精密时钟服务器在自动化系统中的作用 京准电钟&#xff1a;NTP精密时钟服务器在自动化系统中的作用 NTP精密时钟服务器在自动化系统中的作用非常重要&#xff0c;特别是在需要高精度时间同步的场景中。NTP能够提供毫秒级的时间同步精度&#xff0c;这…