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

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

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

实例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

java 内部类 菜鸟编程,java中的匿名内部类相关推荐

  1. Java内部类引用外部类中的局部变量为何必须是final问题解析

    Java内部类引用外部类中的局部变量为何必须是final问题解析 今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来 ...

  2. java 加密解密编程,java 加密解密容易实现

    当前位置:我的异常网» 编程 » java 加密解密容易实现 java 加密解密容易实现 www.myexceptions.net  网友分享于:2013-10-27  浏览:3次 java 加密解密 ...

  3. java程序员编程过程中的基本问题

    问题一:注释器不能找到其中一个类 解决方法: 确保你指定的是类名而不是类的文件名. 如果对CLASSPATH环境变量有进行设置,要重新复位. 如果类在包中,要确保它们处在正确的子目录中. 确保你从.c ...

  4. java内部类内存泄漏,Android中常见的内存泄漏和解决方案

    什么是内存泄漏? 简单点说,就是指一个对象不再使用,本应该被回收,但由于某些原因导致对象无法回收,仍然占用着内存,这就是内存泄漏. 为什么会产生内存泄漏,内存泄漏会导致什么问题? 相比C++需要手动去 ...

  5. java链式编程_Java 中的链式编程

    前言 ​在写项目的时候,有一个实体类有好多个属性,new 出来之后需要不停的使用setXXX( )方法,效率低而且代码可读性差,查询了下发现可以实现实体类的链式编程. public class Use ...

  6. Java多线程并发编程--Java并发包(JUC)

    Java多线程并发–Java并发包(JUC) 前言 前一篇文章中,笔者已经介绍了Java多线程的一些基础知识,但是想要成为一名中高级Java程序员还必须懂得Java并发包(JUC)的知识点,而且JUC ...

  7. java ee监听器编程,java EE开发之Servlet第四课:监听器(Listener)

    1.什么是Listener 监听器就像老板的秘书,那个秘书就是活的监听器,时时监听着老板,当老板发生一些事情的时候,秘书就会有相应的措施.比如老板口渴了,秘书就会去端茶:比如老板要提提神,秘书就会泡一 ...

  8. java数值计算算法编程,Java数值计算算法编程

    第1章 Java与数值计算. 1.1 数值计算中存在的问题 1.2 用Java实现数值计算算法的要点 1.3 实数类设计与实现 第2章 复数运算 2.1 复数类设计 2.2 复数乘法 2.3 复数除法 ...

  9. java io 并发编程,JAVA进阶系列 - 并发编程 - 第1篇:进程线程并发并行

    学习目标进程 线程 并发 并行 内容 一.进程与线程 "专业"点的说法就是:进程是资源分配的最小单位,线程是CPU调度的最小单位. 大哥,我错了,别打脸! 进程 线程就是用来加载指 ...

最新文章

  1. Java集合:HashMap线程不安全?有哪些表现?
  2. [转]关于有偿提供拼图响应式后台的通知
  3. 通俗地讲清楚fit_transform()和transform()的区别
  4. PHP观察者通知机制,观察者模式-通知详解
  5. Python个人项目--豆瓣图书个性化推荐
  6. 【js】【前台输入效验】【validate插件的使用】 前端
  7. 《剑指offer》面试题22——栈的压入、弹出序列(C++)
  8. vue开发中v-for在Eslint的规则检查下出现:Elements in iteration expect to have 'v-bind:key' directives...
  9. 反恐精英online单机版有各种武器
  10. 量子纠缠1——量子比特、Bell态、EPR佯谬
  11. java根据ip地址获取详细地域信息
  12. 斜挎包长度到哪里合适_一般斜挎包长多少厘米_身高170斜挎包带长
  13. 超好看的导航页面(静态页面)
  14. PowerQuery的参数表格用法
  15. JS实现抖音小姐姐表白源码
  16. win10:Python3.7安装PyQt4
  17. vue-pdf使用+分页预览(踩坑 + 使用本地字体库)
  18. react脚手架创建命令教程
  19. 徐家福对计算机科学发展的影响或作用,徐家福先生的两句话
  20. 2021-03-22linux内核编译和安装过程

热门文章

  1. 微机计算机原理姚向华课后答案,微型计算机操作系统
  2. cpython cython_python – 优化Cython中的字符串
  3. ubantu 添加防火墙策略_Ubuntu 14.04 配置iptables防火墙
  4. 给与用户建立dblink的权限_网络安全 之 NTFS安全权限
  5. exception日志 php_PHP 错误与异常的日志记录
  6. python实现五大基本算法_算法基础:五大排序算法Python实战教程
  7. am335x uart5配置
  8. Navicat怎么看oracle作业,[数据库] Navicat for Oracle基本用法图文介绍
  9. c++邮递员投递经过特定点_厉害了斑马鱼,动物实验体天团C位
  10. qr分解求线性方程组_梯度下降求解线性方程组算例设计