Java基础——匿名内部类
文章目录
- 1、匿名内部类
- 2、为什么要使用匿名内部类
- 3、如何使用匿名内部类
1、匿名内部类
匿名内部类,就是没有名字的一种嵌套类。它是Java对类的定义方式之一。
2、为什么要使用匿名内部类
在实际开发中,我们常常遇到这样的情况:一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。
下面详细说明一下
假设当前有一个接口,接口中只有一个方法
public interface Interface01 {void show();
}
为了使用该接口的show方法,我们需要去创建一个实现类,同时书写show方法的具体实现方式
public class Interface01Impl implements Interface01{@Overridepublic void show() {System.out.println("I'm a impl class...");}
}
如果实现类Interface01Impl全程只使用一次,那么为了这一次的使用去创建一个类,未免太过麻烦。我们需要一个方式来帮助我们摆脱这个困境。匿名内部类则可以很好的解决这个问题。
使用匿名内部类
public static void main(String[] args) {Interface01 interface01 = new Interface01() {@Overridepublic void show() {System.out.println("使用了匿名内部类");}};//调用接口方法interface01.show();
}
成功运行结果
3、如何使用匿名内部类
基本格式
new 接口/类名(参数1, 参数2...){实现方法1(){}实现方法2(){}......
};
在上文的使用中,我们没有创建实现类就实现了具体的show方法。同时定义了接口的对象变量interface01。我们发现,这个变量和平常使用多态后的使用方式没有区别。
通常,我们也习惯用这样的方式创建并启动线程
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("我是一个线程");}
}).start();
常见问题
匿名内部类是怎么实现的
在上文代码编译后,我们查看一下class文件的路径
至此,我们可以得知,匿名内部类在编译期间,会生成一个名称以$编号结尾的class文件,即它被识别为一个真实的类,仅在编译前(java文件)为匿名的形态
匿名内部类只可以使用在接口上吗
不是的。匿名内部类可以用在具体类、抽象类、接口上,且对方法个数没有要求。
Java基础——匿名内部类相关推荐
- Java基础——匿名内部类详解及举例
Java基础--匿名内部类详解及举例 说明:定义在外部类的局部位置,比如方法中,并且没有类名 匿名内部类的使用 匿名内部类的基本语法 new 类或接口(参数列表){类体 }; 用途:有些时候为了简化开 ...
- Java基础匿名内部类
1.什么是内部类? 内部类:在类的内部又定义了一个新的类.被称为内部类. 2.内部类的分类: 静态内部类:类似于静态变量 实例内部类:类似于实例变量 局部内部类:类似于局部变量 3.使用内部类编写的代 ...
- Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。
Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解. 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类. 下面先看一个例子,比如说你 ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...
- (CZ深入浅出Java基础)线程笔记
这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...
- java基础学习整理(一)
java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...
- 【转】Java基础知识整理
本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...
- Java基础day23
Java基础day23 Java基础day23-函数接口&stream流 1.函数式接口 1.1函数式接口概述 1.2函数式接口作为方法的参数 1.3函数式接口作为方法的返回值 1.4常用函数 ...
最新文章
- 人们怕人工智能获得意识到底是怕哪个方面?
- 自已写的几个分页的存储过程
- js读写php文件,在js中如何读取本地文件
- 炫彩渐变流体元素PSD分层海报模板,耍酷就选它做背景!
- 职场的秘密,你知道多少?
- AX2009 VS平台报表开发学习笔记(一)--初体验
- CSDN极客头条使用指南
- 【信号检测】基于matlab双稳态随机共振的参数寻优算法【含Matlab源码 1700期】
- 大数据处理与开发课程设计——纽约出租车大数据分析
- ISO 3166-1 国家编码
- ubuntu安装deb文件
- 【第三方互联】微博1、注册成为新浪微博(sina)开发者
- 未來用工新趨勢_2019年社会化用工成新趋势
- 筛选出一些个人常用的快捷键
- Accumulator Proof解析
- Vant IndexBar 在小程序中的简单使用
- Bzoj3441 乌鸦喝水
- Crackme 22
- linux maven 发布项目,Linux下基于Maven的自动化打包发布项目
- vmware注册邮箱问题