当前位置: 首页 > news >正文

Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)

一、JDK8开始新增的方法

默认方法不是抽象方法,所以不强制被重写:

但是如果被重写,就要去掉default关键字:

public可以省略,但是default不可以省略:

public是灰色的,代表可以省略

但是default是橙色的,代表不可以省略:

idea会认为可能想写的是一个abstract类的方法,,没有写的话,idea会将其当作一个abstract类方法所以default不能省略:

如果实现了多个接口,多个接口存在相同名字的默认方法,子类就必须对该方法进行重写:(因为如果不重写的话,就不知道调用的是哪个接口的show方法)

重写后:

静态方法不能被重写:

这样写不叫重写:只是刚好在InterImpl中有一个重名的show方法:

调用接口中的静态方法:

子类把从父类继承下来的虚方法表里面的方法进行覆盖了,这才叫重写,但是私有的,最终的,静态的是不会添加到虚方法表中,所以不叫重写。

二、JDK9开始新增的方法

在JDK9以前只有这种方式:如果有重复代码,只能重写写一个方法,然后再调用show3方法;

普通的私有方法,给默认方法服务的

静态的私有方法,给静态方法服务的:

三、接口的应用:

四、适配器设计模式:

interAdapter类代码:

public abstract class interAdapter implements interA{//设为abstract,为了防止对interAdapter创建对象,因为里面都是重写的空方法,所以创建对象没有意义;@Overridepublic void method1() {}@Overridepublic void method2() {}@Overridepublic void method3() {}@Overridepublic void method4() {}@Overridepublic void method5() {}@Overridepublic void method6() {}@Overridepublic void method7() {}@Overridepublic void method8() {}@Overridepublic void method9() {}@Overridepublic void method10() {}
}

interImpl类代码:

public class interImpl extends interAdapter{//我需要用哪个方法,就重写哪个方法就可以了@Overridepublic void method5(){System.out.println("只需要method5方法");}
}

inter类代码:

public interface interA {public abstract void method1();public abstract void method2();public abstract void method3();public abstract void method4();public abstract void method5();public abstract void method6();public abstract void method7();public abstract void method8();public abstract void method9();public abstract void method10();
}

如果实现类还有父类,由于Java中不能多继承,那么可以让中间类去继承想要的类就可以了

五、内部类:

内部类可以直接访问外部类的成员,包括私有:

外部类要访问内部类的成员,必须创建对象:

内部类的应用有很多,下面列举几个常见的应用场景:

1. 实现回调函数:内部类可以通过将自身作为参数传递给外部类的方法,用于实现回调函数。当某个条件满足时,外部类调用内部类的方法来完成特定的操作。

2. 实现事件监听器:内部类可以实现事件监听器接口,在外部类中注册监听器对象,当特定的事件发生时,内部类的方法会被调用。

3. 封装复杂逻辑:内部类可以访问外部类的私有属性和方法,可以用于封装复杂的逻辑实现。内部类可以直接访问外部类的私有属性,并且可以和外部类进行私有操作,减少了类之间的耦合程度。

4. 实现迭代器:内部类可以作为外部类的成员,实现迭代器接口,可以用于遍历外部类中的数据结构。

5. 多线程编程:内部类可以作为线程的子类或实现线程接口,用于实现多线程编程。

总的来说,内部类的应用非常广泛,能够提供更加灵活和方便的编程方式,增加代码的可读性和可维护性。

相关文章:

Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)

一、JDK8开始新增的方法 默认方法不是抽象方法,所以不强制被重写: 但是如果被重写,就要去掉default关键字: public可以省略,但是default不可以省略: public是灰色的,代表可以省略 但是default是…...

数据结构-二分搜索树(Binary Search Tree)

一,简单了解二分搜索树 树结构: 问题:为什么要创造这种数据结构 1,树结构本身是一种天然的组织结构,就好像我们的文件夹一样,一层一层的. 2,树结构可以更高效的处理问题 二,二分搜索树的基础 1、二叉树 2,二叉树的重要特性 满二叉树 总结: 1. 叶子结点出现在二叉树的最…...

YOLO如何训练自己的模型

目录 步骤 一、打标签 二、数据集 三、跑train代码出模型 四、跑detect代码出结果 五、详细操作 步骤 一、打标签 (1)在终端 pip install labelimg (2)在终端输入labelimg打开 如何打标签: 推荐文章&#xf…...

05 EXTI外部中断

一、中断系统 中断系统:管理和执行中断的逻辑结构。中断:在主程序运行过程中,出现了特定的中断触发条件——中断源,使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继…...

2024.2.23

1.1.1 信号默认、捕获、忽略处理(普通信号) #include <myhead.h> void handler(int signo) {if(signoSIGINT){printf("用户键入 ctrlc\n");} } int main(int argc, const char *argv[]) {//忽略信号if(signal(SIGINT,SIG_IGN)SIG_ERR){perror("signal er…...

PHP实现分离金额和其他内容便于统计计算

得到的结果可以粘贴到excel计算 <?php if($_GET["x"] "cha"){ $tips isset($_POST[tips]) ? $_POST[tips] : ; $pattern /(\d\.\d|\d)/; $result preg_replace($pattern, "\t\${1}\t", $tips); echo "<h2><strong>数…...

基础数据结构和算法《》

递归 1.递归应该一种比较常见的实现一些特殊代码逻辑时需要做的&#xff0c;但常常也是最绕的一种方式&#xff0c;在解释递归 之前&#xff0c;我们用循环和递归来做个比较1.1.如果你打开一扇门后&#xff0c;同样发现前方也有一扇们&#xff0c;紧接着你又打开下一扇门...直…...

[设计模式Java实现附plantuml源码~行为型]对象间的联动~观察者模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…...

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 &#xff0c;不然永远存在&#xff0c;关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…...

基于单片机的太阳能电池板自动跟踪系统的研究

摘要 伴随着人类社会的发展,人口基数越来越大,电量消耗巨大,传统发电原 料污染环境的同时,可用量日益减少,给人类未来生产生活带来了一定的威胁, 因而解决日益剧增的用电量,寻求一种新能源显得极其重要。论文正是基于此 背景下,针对当前太阳能电池板采光率低、自动化水…...

React 模态框的设计(二)

自定义组件是每个前端开发者必备的技能。我们在使用现有框架时难免有一些超乎框架以处的特别的需求&#xff0c;比如关于弹窗&#xff0c;每个应用都会用到&#xff0c;但是有时我们使用的框架中提供的弹窗功能也是功能有限&#xff0c;无法满足我们的应用需求&#xff0c;今天…...

操作符详解3

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作 符&#xff0c;今天继续介绍一部分。 目录 1.操作符的分类 2…...

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…...

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...

OpenCart程序结构与业务逻辑

一、程序业务逻辑说明 在 OpenCart 中&#xff0c;index.php 文件是整个应用程序的入口文件&#xff0c;它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程&#xff1a; 1. **设置路径常量&#xff1a;** - index.php 首先定义了一些重要的路径常量&…...

软件License授权原理

软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...

C/C++实现老鼠走迷宫

老鼠形象可以辨认&#xff0c;可以用上下左右操纵老鼠;正确检测结果&#xff0c;若老鼠在规定的时间内走到粮仓&#xff0c;提示成功&#xff0c;否则提示失败。代码分为3个文件&#xff1a;main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…...

程序员的守护神:为何电脑永不熄灭?

在这个信息时代&#xff0c;程序员成了推动社会进步的“隐形英雄”。他们通宵达旦&#xff0c;手指在键盘上跳跃&#xff0c;创造出一个个令人惊叹的数字世界。有趣的是&#xff0c;你可能注意到了一个现象&#xff1a;程序员似乎总是不关电脑。这并非他们对电脑上瘾&#xff0…...

iOS日志与事件深度解析工具:iLEAPP技术架构与实战指南

iOS日志与事件深度解析工具&#xff1a;iLEAPP技术架构与实战指南 【免费下载链接】iLEAPP iOS Logs, Events, And Plist Parser 项目地址: https://gitcode.com/gh_mirrors/il/iLEAPP 在移动设备取证和数据分析领域&#xff0c;iOS系统的复杂性一直是技术人员的挑战。面…...

开箱即用:BAAI/bge-m3镜像,一键启动语义相似度分析WebUI

开箱即用&#xff1a;BAAI/bge-m3镜像&#xff0c;一键启动语义相似度分析WebUI 1. 快速上手&#xff1a;从零到一的十分钟体验 你是不是也遇到过这样的场景&#xff1f;手头有两段文字&#xff0c;想知道它们说的是不是一回事&#xff0c;或者想快速验证一下自己构建的AI知识…...

Youtu-Parsing开源模型实战:ONNX导出+TensorRT加速部署全流程

Youtu-Parsing开源模型实战&#xff1a;ONNX导出TensorRT加速部署全流程 1. 引言 如果你处理过大量的扫描文档、PDF文件或者图片资料&#xff0c;一定遇到过这样的烦恼&#xff1a;想把图片里的文字、表格、公式提取出来&#xff0c;手动操作不仅费时费力&#xff0c;还容易出…...

MediaPipe人体骨骼检测:零配置Web应用,上传图片秒出骨架图

MediaPipe人体骨骼检测&#xff1a;零配置Web应用&#xff0c;上传图片秒出骨架图 1. 引言&#xff1a;一键式骨骼检测的便捷体验 想象一下这样的场景&#xff1a;健身教练需要快速分析学员的动作姿势&#xff0c;医生希望直观展示患者的骨骼姿态&#xff0c;或者动画师需要参…...

四足机器人避坑指南:为什么你的仿生项目总站不稳?(附开源方案推荐)

四足机器人避坑指南&#xff1a;为什么你的仿生项目总站不稳&#xff1f; 在实验室里调试到凌晨三点&#xff0c;眼看着四足机器人又一次在转弯时摔得"四脚朝天"——这可能是很多机器人开发者共同的噩梦。从步态规划的逻辑漏洞到传感器数据的微妙偏差&#xff0c;从执…...

基于FPGA的DDS在安路TD和EG4A20BG256上的调试技巧与实战经验(五)

1. 安路TD软件常见编译问题排查指南 第一次用安路TD软件编译DDS工程时&#xff0c;我遇到了几个典型的编译错误。最常见的就是license报错&#xff0c;这个坑我踩过三次。当你看到"License expired"或者"Invalid license"提示时&#xff0c;别急着重装软件…...

3个超实用步骤:用DS4Windows让PS手柄在Windows游戏中完美适配

3个超实用步骤&#xff1a;用DS4Windows让PS手柄在Windows游戏中完美适配 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS4/PS5手柄在Windows游戏中无法正常使用而困扰吗&#xf…...

Z-Image-Turbo孙珍妮LoRA模型部署教程:支持WebP/AVIF新格式输出

Z-Image-Turbo孙珍妮LoRA模型部署教程&#xff1a;支持WebP/AVIF新格式输出 1. 引言&#xff1a;快速上手明星风格AI绘图 想用AI生成特定明星风格的图片吗&#xff1f;今天给大家介绍一个非常实用的工具——基于Z-Image-Turbo的孙珍妮LoRA模型。这个模型专门针对孙珍妮的风格…...

短效与动态代理IP区别,时效特性是关键

短效代理IP和动态代理IP最直观、最核心的区别&#xff0c;在于IP存活时长的时效特性&#xff0c;这也是两者适配不同场景的关键的原因。很多用户选型失误&#xff0c;本质是没有吃透两者的时效差异&#xff0c;导致所选代理无法匹配自身业务需求&#xff0c;出现IP失效快、资源…...

CentOS 9 Stream 中 Git 的快速部署与基础配置指南

1. 为什么选择CentOS 9 Stream部署Git&#xff1f; 如果你正在寻找一个稳定且现代化的Linux发行版来搭建开发环境&#xff0c;CentOS 9 Stream绝对是个不错的选择。相比传统的CentOS Linux&#xff0c;Stream版本提供了更频繁的更新&#xff0c;能够让你第一时间用上最新的软件…...