匿名内部类的理解

这个知识点困惑我很久,前几天面试的时候也问到了,没回答出来

首先先说说使用步骤吧

1.有一个接口,且含有一个抽象方法(通常情况我们不会写abstract关键字,冗余的)

2.然后有一个外部类(AnonymousDemo),外部类里面有一个成员方法callInner()

public class Anonymous{

    public void callInner(){

    }

}

3.匿名内部类在callInner()方法中实现,类似于局部内部类

使用方式就是在callInner()方法中new Dao(接口名),重写Dao接口里面的shhow()方法,并且显示的调用show方法进行回调。

补充:回调方法

  1. 创建实例与调用方法new Dao(){...}这部分代码负责创建匿名内部类的实例。但是,仅仅创建实例并不会自动执行其中的方法。为了执行show方法,你需要在实例上显式调用它。

  2. 执行流程:在匿名内部类后面的.show()是对这个刚刚创建的实例的方法调用。如果你没有写.show(),那么show方法将不会被执行,匿名内部类实例也就仅仅是被创建而已,不会有任何输出或动作。

  3. 语法要求:在Java中,方法调用总是需要通过对象引用(即实例)来进行,除非方法是静态的(static)可以直接使用类名调用。在这里,show方法不是静态的,因此你需要通过匿名内部类的实例来调用它。

 代码实现:

 匿名内部类的使用细节

  1. 匿名内部类的语法比较奇特,请大家注意,因为匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的特征,对前面代码分析可以看出这个特点。
  2. 可以直接访问外部类的所有成员,包含私有的。
  3. 不能添加访问修饰符,因为它的地位就是一个局部变量。
  4. 作用域:仅仅在定义它的方法或代码块中。
  5. 匿名内部类—>访问—>外部类成员 [访问方式:直接访问]
  6. 外部其他类—>不能访问—>匿名内部类(因为匿名内部类地位是一个局部变量)
  7. 如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

匿名内部类的使用目的

有时我们想去调用一个接口/抽象父类的抽象方法,但是又只是调用一次,不存在复用的情况。传统方法我们通常需要创建一个新的类去继承这个抽象父类或者实现这个接口,并且提供抽象方法的实现。这种方式会显得繁琐,通过匿名内部类,我们可以在需要的地方直接创建一个继承自抽象父类或实现接口的子类实例,而无需显式地定义一个新的类。

匿名内部类的注意点

匿名内部类并不是“直接new一个接口或者抽象父类”。实际上,我们是在创建一个新的匿名类的实例,这个匿名类隐式地继承了抽象父类或实现了接口,并且提供了抽象方法的实现。因此,虽然从语法上看起来像是直接new了一个接口或抽象父类,但实际上背后还是进行了类的创建和实例化的过程。

总结:理解了之后其实匿名内部类也没那么复杂,总结一句话无非就是,当我们需要且仅需要使用一次接口/抽象父类 的抽象方法时,就可以考虑使用匿名内部类,并且使用的时候只需要在外部类的方法中进行相应的new Xxx(接口/抽象父类),并且重写方法,在结尾调用回调函数即可。

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

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

相关文章

深入探索电能消耗数据:基于机器学习的分析与洞察

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

架构的本质之 MVC 架构

前言 程序员习惯的编程方式就是三步曲。 所以,为了不至于让一个类撑到爆💥,需要把黄色的对象、绿色的方法、红色的接口,都分配到不同的包结构下。这就是你编码人生中所接触到的第一个解耦操作。 分层框架 MVC 是一种非常常见且常…

突破挑战,创新前行 | 生信科技SOLIDWORKS 2025新品发布会·合肥站精彩回顾

2024年10月18日,由生信科技举办的首场SOLIDWORKS 2025新产品发布会在安徽合肥圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 合肥站活动日,由生信科技副总经理徐建开场。他以智造无界&…

鸿蒙HarmonyOS应用开发者(基础+高级)认证

文章目录 鸿蒙HarmonyOS应用开发者(基础高级)认证👉1.HarmonyOS认证介绍1.1、HarmonyOS发展历程1.2、HarmonyOS NEXT 开发预览版1.3、ArkTS语言开发鸿蒙应用1.4、HarmonyOS应用开发者基础认证的核心内容1.5、HarmonyOS应用开发者高级认证的核心内容1.6、HarmonyOS应…

三菱变频器A800\F800\D700E700\CS80等系列变频器选件一览

配备了丰富的选配件,可以提升变频器的性能、增加功能、支持更多的安装方式等。 变频器和外围设备 选件表

精准提炼 | SOLIDWORKS 2025:工程图与钣金焊件新功能

SOLIDWORKS 每年的更新都致力于提升用户的设计效率与体验,SOLIDWORKS 2025 同样带来了众多改进,下面让我们快速了解一下在SOLIDWORKS 2025 工程图与钣金焊件方面的新功能。 工程图相关 一、表面粗糙度符号标注 新版本现在将符合更新 ISO 标准 (ISO 21…

SpringBoot核心框架之AOP详解

SpringBoot核心框架之AOP详解 一、AOP基础 1.1 AOP概述 AOP:Aspect Oriented Programming(面向切面编程,面向方面编程),其实就是面向特定方法编程。 场景:项目部分功能运行较慢,定位执行耗时…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

HBuilder X 中Vue.js基础使用4->表单输入绑定(三)

表单绑定是实现动态数据双向绑定的重要部分,它让开发者可以轻松地管理和响应用户输入。本文将详细介绍如何在Vue 3中利用v-model指令以及一些特定修饰符来处理不同类型的表单输入。 v-model双向数据绑定 Vue的 v-model 指令提供了双向绑定的功能,key在…

动态规划-回文串问题——647.回文子串

1.题目解析 题目解析:647.回文子串——力扣 测试用例 2.算法原理 1.状态表示 本题需要判断一段字符串是否为回文子串,因此最简单的方法就是保存起开始位置与结束位置,那么就需要一个二维的dp表来保存一段字符串是否为回文子串,…

AI绘画王者归来!SD恐怖如斯!Facebook最强人体分割大师Sapiens 吊打SAM2,亦可Pose,Depth,Normal,ComfyUI

在AI绘画领域,SD恐怖如斯和Facebook的Sapiens模型一直是业界关注的焦点。而最近,Sapiens模型凭借其强大的人体分割能力,再次成为AI绘画领域的佼佼者。 SD恐怖如斯和Sapiens模型的优势 SD恐怖如斯是一款基于深度学习的AI绘画模型,…

Redis-06 Redis复制

主: 192.168.248.132 6379 从1: 192.168.248.140 6380 从2: 192.168.248.139 6381 1.三大命令 拷贝一个新的redis.conf(出厂默认,没修改的)的文件 2.配置详情 2.1 改为yes 2.2 87行注释掉 2.3 改为no …

什么是成品系统源码,哪里有成品源码,成品源码二次开发需要多久?

成品系统源码指的是已经开发完成、可以立即部署或根据需求进行二次开发的软件系统源代码。这些源码通常包括但医疗信息化软件(如HIS、LIS、PACS等)、智慧工地源码、家政预约上门系统、实验室管理系统、定位系统源码以及生产管理系统等。 1、医疗信息化软…

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…

ELK之路第三步——日志收集筛选logstash和filebeat

logstash和filebeat(偷懒版) 前言logstash1.下载2.修改配置文件3.测试启动4.文件启动 filebeat1.下载2.配置3.启动 前言 上一篇,我们说到了可视化界面Kibana的安装,这一篇,会简单介绍logstash和filebeat的安装和配置。…

终于完工! ffmpeg 视频滤镜:添加文本-drawtext

滤镜描述 drawtext 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以给视频添加上文本&#xff0c;可以给文本加边框、颜色、阴影。注意不是字幕功能&#xff0c;因为这个滤镜不能精准的控制开始和结束的时间。 滤镜使用 参数 fontfile <string> …

【模型学习之路】手写+分析Transformer

手写分析transformer 目录 前言 positional encoding 注意力机制 多头注意力 高维度乘法 多头注意力机制 多头注意力层的实现 Encoder FeedForwardNet EncoderLayer Encoder Decoder DecoderLayer Decoder 组装Trasformer! 后话 测试一下 mask 前言 Attenti…

Z 检验和 T 检验之间的区别

目录 一、说明 二、什么是假设检验&#xff1f; 三、假设检验基础 3.1 假设检验的基本概念 3.2 、执行假设验证的步骤 3.3 临界值、P 值 3.4 方向假设 3.5 非方向假设检验s 四、什么是 Z 检验统计量&#xff1f; 五、Z 检验示例 5.1 单样本 Z 检验 5.2 双样本 Z 检…

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…

大模型是怎么训练的 微调vsRAG

模型训练的关键 在理解提示工程、RAG和微调时&#xff0c;我们首先需明白大模型的训练依托于海量多样数据&#xff0c;使其具备跨领域的综合能力。以一个具体案例为例&#xff0c;当面对问题解答失败的情况时&#xff0c;需从三方面分析&#xff1a;一、提问者表述不清&#x…