匿名内部类也就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

例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) {

Child p = new Child();

p.eat();

}

}

运行结果:Eat something!

可以看到,此处的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笔记19:Java匿名内部类的更多相关文章

  1. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  2. java 笔记(4) —— java I/O 流、字节流、字符流

    Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...

  3. Java笔记:Java集合概述和Set集合

    本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...

  4. Java笔记:Java 流(Stream)、文件(File)和IO

    更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...

  5. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...

  6. Thinking in Java——笔记(19)

    Enumerated Types Basic enum features When you create an enum, an associated class is produced for yo ...

  7. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  8. 疯狂java笔记(七) - Java集合之Map

    Map是以键值对(key-value)的形式来存储数据的.而且Map不允许key的重复,通过Map存储key-value对时,只需要考虑key的存储就可以,key存储后value就会跟着key(完全可 ...

  9. java笔记 chapter1 java是什么,能干什么,有什么,特点,开发环境

    一,java是什么 二,java能干什么 三,java有什么 四,java的特点 五,java的三大特性:虚拟机,垃圾回收和代码安全 六,构建JSE开发环境:下载安装jdk和配置环境变量 七,编写并运 ...

随机推荐

  1. “无法识别的配置节system.webServer”解决办法

    在Winsows 2008 Server 上安装asp.net 1.1 的应用程序,在启用默认文档或者浏览目录时会向 web.config 文件添加 <system.webServer> ...

  2. 【JBPM4】State 节点

    State状态节点 相比 Task 节点的区别为: 主要是没有“操作人员”assignee 流程操作方便基本相同.如下: 部署流程: repositoryService.createDeploymen ...

  3. AC日记——送花 洛谷 P2073

    送花 思路: 线段树: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct TreeN ...

  4. es6数组必看太实用了

    随着前后分离,前端人员也要写大量的逻辑代码,es5很多地方尤其是数据工具大拿数组,很多时候都是捉襟见肘. 继而,es6为我们扩展了很多good的工具和方法,让我们一起学习es6吧. 1原型方法from ...

  5. vault-in-kubernetes

    http://www.devoperandi.com/vault-in-kubernetes-take-2/ https://www.usenix.org/sites/default/files/co ...

  6. 17-7-24-react入门

    先说明下为什么说好每天一更,周五周六周日都没有更新.因为在周五的时候,上司主动找我谈了转正后的工资4-4.5K.本来想好是6K的,后来打听了一圈公司的小伙伴,都是5-5.5,我就把自己定到了5K.万万 ...

  7. Java工具类-设置字符编码

    package common; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...

  8. 洛谷P1880 [NOI1995] 石子合并 [DP,前缀和]

    题目传送门 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆 ...

  9. equals和hashcode 和 ==方法说明

    java中==.equals().hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢? 关于== ==是容易理解的.java设计 ...

  10. Sqli-labs less 7

    Less-7 本关的标题是dump into outfile,意思是本关我们利用文件导入的方式进行注入.而在background-3中我们已经学习了如何利用dump into file. 这里首先还是 ...