文章目录

  • 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基础——匿名内部类相关推荐

  1. Java基础——匿名内部类详解及举例

    Java基础--匿名内部类详解及举例 说明:定义在外部类的局部位置,比如方法中,并且没有类名 匿名内部类的使用 匿名内部类的基本语法 new 类或接口(参数列表){类体 }; 用途:有些时候为了简化开 ...

  2. Java基础匿名内部类

    1.什么是内部类? 内部类:在类的内部又定义了一个新的类.被称为内部类. 2.内部类的分类: 静态内部类:类似于静态变量 实例内部类:类似于实例变量 局部内部类:类似于局部变量 3.使用内部类编写的代 ...

  3. Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。

    Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解. 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类. 下面先看一个例子,比如说你 ...

  4. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  5. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天--JAVA基础回顾 这才学习Android的 ...

  6. (CZ深入浅出Java基础)线程笔记

    这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...

  7. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

  8. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

  9. Java基础day23

    Java基础day23 Java基础day23-函数接口&stream流 1.函数式接口 1.1函数式接口概述 1.2函数式接口作为方法的参数 1.3函数式接口作为方法的返回值 1.4常用函数 ...

最新文章

  1. 人们怕人工智能获得意识到底是怕哪个方面?
  2. 自已写的几个分页的存储过程
  3. js读写php文件,在js中如何读取本地文件
  4. 炫彩渐变流体元素PSD分层海报模板,耍酷就选它做背景!
  5. 职场的秘密,你知道多少?
  6. AX2009 VS平台报表开发学习笔记(一)--初体验
  7. CSDN极客头条使用指南
  8. 【信号检测】基于matlab双稳态随机共振的参数寻优算法【含Matlab源码 1700期】
  9. 大数据处理与开发课程设计——纽约出租车大数据分析
  10. ISO 3166-1 国家编码
  11. ubuntu安装deb文件
  12. 【第三方互联】微博1、注册成为新浪微博(sina)开发者
  13. 未來用工新趨勢_2019年社会化用工成新趋势
  14. 筛选出一些个人常用的快捷键
  15. Accumulator Proof解析
  16. Vant IndexBar 在小程序中的简单使用
  17. Bzoj3441 乌鸦喝水
  18. Crackme 22
  19. linux maven 发布项目,Linux下基于Maven的自动化打包发布项目
  20. vmware注册邮箱问题

热门文章

  1. 畅玩7X会用上鸿蒙系统吗,荣耀畅玩7X怎么样?值不值得买看完你就知道了
  2. 在电脑上安装或更新Kindle阅读软件
  3. 百度地图api调用 实现车载导航功能
  4. 设计模式之禅-策略模式
  5. 这是一个普通的WIN32扫雷程序
  6. spingboot+layui+poi实现excel导入功能,并批量插入数据库
  7. MapperScan扫描多个包写法
  8. 五子棋(基本+扩展)
  9. python 图像等比例缩放
  10. monkey脚本试验