博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的匿名内部类总结
阅读量:6077 次
发布时间:2019-06-20

本文共 2047 字,大约阅读时间需要 6 分钟。

hot3.png

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

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

但使用匿名内部类还有个前提条件:必须继承一个父类(一般该父类是抽象类)实现一个接口

 

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

转载于:https://my.oschina.net/wangsifangyuan/blog/706819

你可能感兴趣的文章
[转载]乔布斯十大经典语录
查看>>
水果瀑布流布局
查看>>
SharedSDK微信分享不成功,分享之后没有反应
查看>>
js 冷门的 label 语法
查看>>
新姿势!Redis中调用Lua脚本以实现原子性操作
查看>>
CSS 外边距(MARGIN)重叠及防止方法-转
查看>>
数据结构 链表基础算法
查看>>
待修 Bug
查看>>
2594. [WC2006]水管局长数据加强版【LCT+最小生成树】
查看>>
html5定位并在百度地图上显示
查看>>
分析dubbo心跳检测机制
查看>>
[python]练习之九九乘法表
查看>>
Github上的star和fork是什么
查看>>
mysql引擎 区别
查看>>
在WPF中如何将Enum 绑定到 集合控件?
查看>>
android四大组件(一)Activity
查看>>
lamp配置多个虚拟站点
查看>>
C++——函数重载
查看>>
poj1251 裸Prim
查看>>
abstract class VS Interfact
查看>>