详解Java匿名内部类
作者:CoolTomato_ 发布时间:2023-04-30 14:51:28
匿名内部类:
先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是什么感觉。
为了进行对比,先举一个正常的类方法调用的例子(大家应该都看的懂吧):
输出结果为:
接下来便开始说正题吧,匿名内部类,通过名字,想必大家就知道什么是匿名内部类了吧,
1、定义:就是没有名字的内部类(内部类之前介绍过了哦)。
2、使用内部类有什么好处呢,一句话就概括了:简化书写,至于是怎么简化的,哪里简化了等下再说。
3、先说一下什么时候使用匿名内部类,即使用前提和条件:必须存在继承和实现关系的时候才可以使用,其实这也很好理解,首先,匿名内部类没有名字,那该如何描述以及new个对象呢?对,没错,要通过继承它的父类或者实现一个接口来达成这一目的。
下面举个例子:
输出结果:
看到这几行代码,应该就不用我来解释为什么说匿名内部类可以简化书写了吧。
如何调用匿名内部类中的方法这个应该也是大家好奇的吧,毕竟匿名内部类没有类名该如何调用方法就成为了一个问题。
1、匿名内部类中只有一个方法的情况
2、匿名内部类有一个方法调用起来很容易,那如果有多个方法呢,大家不会想这样吧?
输出结果试一下:
那么该如何调用匿名内部类中的多方法呢?
Endeavor有两种方法,如果大家还有更好的方法多多赐教哦!
1、利用多态的思想(匿名内部类的前提是存在继承或实现关系的)
输出结果:
2、改变方法类型,返回this
输出结果:
不知道看完之后大家有没有什么疑问,如果想调用匿名内部类自己特有的方法的时候呢?该如何调用呢?
输出结果:
显然是不行的,所以Endeavor觉得内名内部类可以有自己特有的方法,但是前提条件是这个匿名内部类只有这一个方法。如果有多个方法的时候,他只能继承父类的方法以及重写这个方法或实现接口,绝不可能在在多个方法的情况下,调用自身特有的方法,但是这个特有的方法可以存在,但无法调用,不知道大家认同与否。
举例:
输出结果:
补充三点:
1、匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。
之前说过匿名内部类存在的前提是要有继承或者实现关系的,但是并没有看到extends和implements关键字,这是怎么回事呢?
答:很简单,匿名内部类没有连类名都没有,使用关键字就更无从说起了。这些由jvm搞定了。
2、匿名内部类是实现接口
3、接下来和大家分享一下匿名内部类中使用最普遍的一种情况,即以实参的形式使用
输出结果:
来源:https://blog.csdn.net/qq_34944851/article/details/51449420


猜你喜欢
- 技术要点org.springframework.web.context.request.async.DeferredResult<T&
- 阅读目录:基础Socket编程多线程并发阻塞式同步IO基础在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。
- 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢?我们考虑一个简单的赋值问题:in
- 1.导入pom依赖<!-- mybatis-->  
- 为了提高用户体验,我们肯定希望该Dialog能更加炫酷,让用户看着更舒服。那如何做呢,当然是我们自己定义一个ProgressDialog了。
- 前言MyBatis中也提供了注解式开发⽅式,采⽤注解可以减少Sql映射⽂件的配置。 当然,使⽤注解式开发的话,sql语句是写在java程序中
- 查了网上的资料,有比较全面的,但有一个问题就是容易出现一个文字和框子不符合的现象。(仔细看,蓝色字母和背景的灰色有空白)要消除这个空白,很简
- 前言:图片选择器基本上是每个App必备的东西,用公认好的第三方也可以,但是自己写的改起来方便,用起来顺手,而且这东西想想可能没动手之前想想比
- 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去?一般的做法就是 一个达到try catch,然后在finally里面
- 在我们编写好一款软件后,我们不想别人盗用我们的软件,这时候我们可以采用注册的方式来保护我们的作品。这时候我们可能就需要简单了解一下加密解密技
- 本文实例讲述了C#画图之饼图折线图的实现方法,是C#程序设计中非常实用的技巧。分享给大家供大家参考。具体方法分析如下:显示图像的控件定义如下
- 1. Consul 简介Consul是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服 务注册与
- 本文实例讲述了Android编程实现ActionBar的home图标动画切换效果。分享给大家供大家参考,具体如下:Material Desi
- seata的部署和集成1.部署Seata的tc-server1)下载首先我们要下载seata-server包,地址在http/seata.i
- 问题描述 idea启动tomcat后乱码了,并且,idea的各种编码都是设置的为UTF-8,但是中文就是乱码了。解决方法 进入idea的安装
- 目录synchronized 实现原理适应性自旋(Adaptive Spinning)锁升级Java 对象头偏向锁(Biased Locki
- 发疯的产品要做一个可以单选和多选的下拉列表,陪你玩玩吧。直接上效果:实现方案:我的思路是自定义一个类继承PopupWindow,里面的选项采
- mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但
- 字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是jav
- 本文实例讲述了Android编程判断SD卡是否存在及使用容量查询实现方法。分享给大家供大家参考,具体如下:1.判断SD卡是否存在 返回tru