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

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

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

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

abstract classPerson {public abstract voideat();

}class Child extendsPerson {public voideat() {

System.out.println("eat something");

}

}public classDemo {public static voidmain(String[] args) {

Person p= newChild();

p.eat();

}

}

运行结果:eat something

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

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

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

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

abstract classPerson {public abstract voideat();

}public classDemo {public static voidmain(String[] args) {

Person p= newPerson() {public voideat() {

System.out.println("eat something");

}

};

p.eat();

}

}

运行结果:eat something

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

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

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

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

interfacePerson {public voideat();

}public classDemo {public static voidmain(String[] args) {

Person p= newPerson() {public voideat() {

System.out.println("eat something");

}

};

p.eat();

}

}

运行结果:eat something

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

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

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

public classDemo {public static voidmain(String[] args) {

Thread t= newThread() {public voidrun() {for (int i = 1; i <= 5; i++) {

System.out.print(i+ " ");

}

}

};

t.start();

}

}

运行结果:1 2 3 4 5

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

public classDemo {public static voidmain(String[] args) {

Runnable r= newRunnable() {public voidrun() {for (int i = 1; i <= 5; i++) {

System.out.print(i+ " ");

}

}

};

Thread t= newThread(r);

t.start();

}

}

运行结果:1 2 3 4 5

java匿名内部类_java中的匿名内部类相关推荐

  1. java中带参数匿名内部类_Java中的匿名内部类

    一.匿名内部类 之前的所有类都有自己的名字,但是有时候如果某个接口的实现类(或者某个父类的子类)只需要使用一次,此时这样的类如果我们单独定义出来则需要单独为其创建一个"*.java" ...

  2. java中大量匿名内部类的坏处_java中的匿名内部类总结

    转自:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只 ...

  3. java中匿名内部类实现接口_java中的匿名内部类是成员内部类吗?我就很不明白为什么造一个接口的时候匿名内部类是怎么去实现接口的...

    展开全部 内部类分为四种: 静态e68a8462616964757a686964616f31333337623463内部类(static inner classes) 成员内部类(member inn ...

  4. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  5. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  6. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  7. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  8. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  9. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

最新文章

  1. 关于程序为什么要代码段,程序段
  2. STL标准容器类简介
  3. CV之Face Detection:Face Detection人脸检测原理及其常见分类技术
  4. 帮助你高效开发Ajax应用的超酷jQuery插件 - AjaxML
  5. 结对编程 黄金点游戏
  6. freemarker -自定义指令
  7. 编程之美-翻烙饼Java实现
  8. makefile函数集锦
  9. 237.删除链表中的节点
  10. 多小区下小区上行速率的计算(3)
  11. 目标检测应用竞赛 | 天池铝型材表面瑕疵(含数据集、详细解决方案)
  12. 前端程序员的日常与心酸
  13. 用WebView秒做一款简易的浏览器app
  14. [华为 HCNA ] VLAN的介绍和划分
  15. 如何提高团队管理能力6
  16. 基于MQ-135传感器和Arduino开发板的烟雾探测器
  17. 任意函数展开为各阶Taylor多项式的matlab程序
  18. 柬埔寨月薪4万敲代码?真相是我差点丢了性命!
  19. 15岁黑进北美防空司令部,社工界的鼻祖如何社工?
  20. 也谈地方门户网站运营

热门文章

  1. 在代码中设置TextView 的字体颜色
  2. 分享一个在线vim网站
  3. [Axios] axios的基础语法
  4. MySQL_管理与维护
  5. Python_生成器Generator
  6. 7-81 单词长度 (15 分)
  7. python framework threads_python 多线程,进程的理解
  8. c语言用菜单做计算器,小白求大神帮忙用C语言做个多功能计算器!!!!
  9. Windows下的Crontab表达式解析DLL的使用
  10. PS 滤镜算法原理——染色玻璃