匿名内部类也就是没有名字的内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

实例1:不使用匿名内部类来实现抽象方法

abstract class Person {public abstract void eat();
}class Child extends Person {public void eat() {System.out.println("eat something");}
}public class Demo {public static void main(String[] args) {Person p = new Child();p.eat();}
}

运行结果:eat something

可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?

这个时候就引入了匿名内部类

实例2:匿名内部类的基本实现

abstract class Person {public abstract void eat();
}public class Demo {public static void main(String[] args) {Person p = new Person() {public void eat() {System.out.println("eat something");}};p.eat();}
}

运行结果:eat something

可以看到,我们直接将抽象类Person中的方法在大括号中实现了

这样便可以省略一个类的书写

并且,匿名内部类还能用于接口上

实例3:在接口上使用匿名内部类

interface Person {public void eat();
}public class Demo {public static void main(String[] args) {Person p = new Person() {public void eat() {System.out.println("eat something");}};p.eat();}
}

运行结果:eat something

由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

实例4:Thread类的匿名内部类实现

public class Demo {public static void main(String[] args) {Thread t = new Thread() {public void run() {for (int i = 1; i <= 5; i++) {System.out.print(i + " ");}}};t.start();}
}

运行结果:1 2 3 4 5

实例5:Runnable接口的匿名内部类实现

public class Demo {public static void main(String[] args) {Runnable r = new Runnable() {public void run() {for (int i = 1; i <= 5; i++) {System.out.print(i + " ");}}};Thread t = new Thread(r);t.start();}
}

运行结果:1 2 3 4 5

更多内部类:http://blog.csdn.net/guomutian911/article/details/48938565

Java匿名内部类总结相关推荐

  1. java 匿名内部类 百科_java匿名内部类具体概念是什么,在什么地方用到?

    展开全部 java匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们e69da5e887aa62616964757a686964616f313333376138 ...

  2. Java匿名内部类里为什么能用外部变量

    2019独角兽企业重金招聘Python工程师标准>>> 偶然间想到一个问题,Java匿名内部类里为什么能用外部变量?Java到底在背后做了什么呢: final List<Int ...

  3. 关于JAVA匿名内部类,回调,事件模式的一点讨论

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 关于JA ...

  4. 去除残缺条目java_为什么说Java匿名内部类是残缺的闭包

    为什么说Java匿名内部类是残缺的闭包 https://blog.csdn.net/hzy38324/article/details/77986095 前言 我们先来看一道很简单的小题: public ...

  5. java匿名内部类,什么是匿名内部类,如何定义匿名内部类,如何使用匿名内部类?

    java匿名内部类 什么是匿名内部类? 匿名内部类的使用场景? 匿名内部类如何创建? 匿名内部类的实现和使用 例1(实现接口) 例2(继承类) 什么是匿名内部类? 匿名内部类,顾名思义,就是不知道这个 ...

  6. Java匿名内部类的用法(简单教学)

    Java匿名内部类笔记 public class Test{public static void main(String[] args){/*语法*///Coo o1 = new Coo(); //创 ...

  7. 为什么说Java匿名内部类是残缺的闭包

    为什么说Java匿名内部类是残缺的闭包 https://blog.csdn.net/hzy38324/article/details/77986095 前言 我们先来看一道很简单的小题: public ...

  8. java 匿名内部类 参数_Java匿名内部类原理与用法详解

    本文实例讲述了Java匿名内部类原理与用法.分享给大家供大家参考,具体如下: 一 点睛 匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: new 父类构造器(实参列表) | 实 ...

  9. Java匿名内部类和Lambda表达式

    Java匿名内部类和Lambda表达式 一.Java匿名内部类 二.JavaLambda表达式 全部代码: 代码运行结果: 一.Java匿名内部类 我们在使用匿名内部类时,需要记住以下几个重要的知识点 ...

  10. JAVA匿名内部类的一点讨论

    关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类. 存在它的原因是: 1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据.即内部类实例对包含它的哪个类的实例来说,是特权的. 2. ...

最新文章

  1. Linux系统上的文件类型
  2. 阿里云制造行业总经理胡鑫:中台技术如何支撑企业数字化转型
  3. linux系统死亡之平台,又一个Linux发行版宣告死亡
  4. 在macOS搭建React Native for IOS开发环境
  5. LeetCode 179. 最大数(自定义谓词函数--Lambda表达式--排序)
  6. 如何用 Python 解读著名的“三门问题”?
  7. 2017行进中的杂想,做一个极少数的历史
  8. 优先队列 STL (转)
  9. Nginx配置文件(作为Web服务器)
  10. Java反编译工具JAD安装与基本使用
  11. matlab的矩阵运算,MATLAB的矩阵运算
  12. 模糊综合评价-----层次分析法AHP
  13. w10如何共享计算机硬盘,w10共享盘怎么设置_win10如何共享硬盘
  14. 速读原著-TCP/IP(SNMP示例)
  15. R语言详解参数检验和非参数检验——样本T检验、方差分析、pearson相关性检验、单样本wilcoxon检验、Mann-Whitney检验、配对样本wilcoxon检验、列联表检验、卡方检验
  16. 2021年广东省安全员A证第三批(主要负责人)考试内容及广东省安全员A证第三批(主要负责人)免费试题
  17. upyun java_又拍云Java SDK
  18. C++ MFC 学习笔记+小型通讯录系统实现
  19. 20个免费的网络电话
  20. WIN10装cygwin后,打开提示找不到mintty

热门文章

  1. 以效率为根本,网易慢跑要做“另类”的TO B业务
  2. SHOP++源码部署说明:
  3. Extjs grid选中一条记录Ajax访问后台
  4. 如何做好iOS应用安全?这有一把行之有效的“三板斧”
  5. 110余家企业聚集智博会 专家表示智慧城市需以打破数据堡垒为前提
  6. 防火墙先锋 Check Point 进军汽车数据防护领域
  7. 如何让springboot中的某些html文件不经过thymeleaf模板解析?
  8. C++ STL学习之容器set和multiset (补充材料)
  9. Git使用技巧(3)-- 远程操作
  10. HttpClient 讲解 (2) 项目封装