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.匿名内部类(掌握)

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

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

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

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

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

相关文章

第48天:Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式

#知识点 1、安全开发-JavaEE-第三方依赖开发安全 2、安全开发-JavaEE-数据转换&FastJson&XStream 3、安全开发-JavaEE-Shiro身份验证&Log4j日志处理 一、Log4j 一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工…

JavaScript——前端基础3

目录 JavaScript简介 优点 可做的事情 运行 第一个JavaScript程序 搭建开发环境 安装的软件 操作 在浏览器中使用JavaScript文件 分离JS 使用node运行JS文件 语法 变量与常量 原生数据类型 模板字符串 字符串的内置方法 数组 对象 对象数组和JSON if条件语…

坐标变换及视图变换和透视变换(相机透视模型)

文章目录 2D transformationScaleReflectionShear(切变)Rotation around originTranslationReverse变换顺序复杂变换的分解 齐次坐标(Homogenous Coordinates)3D transformationScale&TranslationRotation Viewing / Camera t…

DBGPT安装部署使用

简介 DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。 目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Mul…

【windows driver】 开发环境简明安装教程

一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤: 1、安装Visual Studio IDE 笔者建议安装最新版本,可以向下兼容。发文截止到目前,VS2022是首选,当前笔者由于项…

回文重新排序

回文串就两种情况&#xff0c;一种是有一个奇数个的字母&#xff0c;另一种是没有的。所以我们需要统计出题目给出的字母是否为奇数个&#xff0c;且奇数个只能有一个&#xff0c;如果超过一个就不能构成回文串了。 #include<iostream> #include<string> #include…

如何在docker上部署java服务

目录结构 首先 Dockerfile FROM bladex/alpine-java:openjdk17_cn_slimMAINTAINER admin@rsz.comENV TZ=Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN mkdir -p /xhWORKDIR /xhEXPOSE 8106ADD ./blade-system.…

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…

《SegFace: Face Segmentation of Long-Tail Classes》论文分享(侵删)

author{Kartik Narayan and Vibashan VS and Vishal M. Patel} 原文链接&#xff1a;[2412.08647] SegFace: Face Segmentation of Long-Tail Classes 摘要 人脸解析是指将人脸语义分割为眼睛、鼻子、头发等关键面部区域。它是各种高级应用程序的先决条件&#xff0c;包括人脸…

readline模块详解!!【Node.js】

‌“书到用时方恨少&#xff0c;事非经过不知难。”‌ —— 陆游 目录 ‌readline 是什么&#xff1f;‌基本用法&#xff1a;‌创建 Interface 类&#xff1a;核心流程‌&#xff1a; ‌Interface 类的关键事件&#xff1a;line&#xff1a;close&#xff1a;pause&#xff1a…

基于POI的Excel下拉框自动搜索,包括数据验证的单列删除

目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话&#xff0c;相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…

UWB人员定位:精准、高效、安全的智能管理解决方案

在现代企业管理、工业生产、安全监测等领域&#xff0c;UWB&#xff08;超宽带&#xff09;人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式&#xff0c;UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势&#xff0c;能够实现…

如何在Apple不再支持的MacOS上安装Homebrew

手头有一台2012年产的Macbook Pro&#xff0c;系统版本停留在了10.15.7&#xff08;2020年9月24日发布的&#xff09;。MacOS 11及后续的版本都无法安装到这台老旧的电脑上。想通过pkg安装Homebrew&#xff0c;发现Homebrew releases里最新的pkg安装包不支持MacOS 10.15.7&…

某个设备的RJ45网口接头为何不可连接任何POE设备

某个设备的RJ45网口接头不可连接任何POE设备 1.POE设备是什么&#xff1f; POE设备是指支持通过以太网线传输电力和数据的设备&#xff0c;即“Power over Ethernet”&#xff08;PoE&#xff09;技术的设备。这种技术允许网络设备在传输数据的同时&#xff0c;通过标准的RJ4…

【线性代数的理解】 为什么说线性代数研究的是空间变换?旋转矩阵坐标转换矩阵

注&#xff1a; 在线性代数中 &#xff0c;常常不把点看成是点&#xff0c;而是看成是一个由原点出发的向量。所以&#xff0c;点的坐标相当于是向量的坐标。正方形&#xff08;图中灰色图形&#xff09;可以看成是由一大堆向量组成的图形&#xff0c;对这一堆向量进行A变换&a…

Cursor+pycharm接入Codeuim(免费版),Tab自动补全功能平替

如题&#xff0c;笔者在Cursor中使用pycharm写python程序&#xff0c;试用期到了Tab自动补全功能就不能用了&#xff0c;安装Codeuim插件可以代替这个功能。步骤如下&#xff1a; 1. 在应用商店中搜索扩展Codeuim&#xff0c;下载安装 2. 安装完成后左下角会弹出提示框&#x…

操作系统知识点12

1.在操作系统的结构设计中&#xff0c;采用层次结构的操作系统其最大优点是把整体问题局部化 2.非特权指令是指操作系统和用户均可以使用的指令 3.向处理器发出的中断信号称为中断请求 4.轮转法RR是单纯基于时间片考虑的 5.当进程处于就绪状态时&#xff0c;表示进程已获得…

STM32学习——RTC实时时钟(BKP与RTC外设)

RTC实时时钟 RTC实时时钟 想记录或读取日期和事件&#xff0c;就可以通过操作RTC实现 RTC与BKP和PWR经常同时出现 一般情况下&#xff0c;VBTA是电池供电口&#xff0c;需要接备用电池 在BKP备份寄存器写入两个数据&#xff0c;然后再读出之后显示&#xff0c;BKP的数据&a…

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…

软件工程应试复习(考试折磨版)

针对学校软件工程考试&#xff0c;参考教材《软件工程导论&#xff08;第6版&#xff09;》1-8章 学习的艺术&#xff1a;不断地尝试&#xff0c;我一定会找到高效用的方法&#xff0c;让学习变成一门艺术&#xff0c;从应试备考中解救出我的时间同胞们。 好嘞&#xff01;既然…