龙空技术网

Java匿名内部类原理与用法详解

多肉与月季 574

前言:

眼前看官们对“java的匿名内部类”可能比较关心,小伙伴们都想要了解一些“java的匿名内部类”的相关文章。那么小编也在网络上汇集了一些有关“java的匿名内部类””的相关资讯,希望咱们能喜欢,姐妹们一起来了解一下吧!

这篇文章主要介绍了Java匿名内部类原理与用法,结合实例形式分析了Java匿名内部类的概念、原理、应用与相关操作注意事项,需要的朋友可以参考下

一 点睛

匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下:

从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。

两条规则。

匿名内部类不能是抽象类。匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。

二 实战

1 点睛

最常用的创建匿名内部类的方式是创建某个接口类型的对象

2 代码

3 运行

购买了一个AGP显卡,花掉了567.8

4 说明

定义匿名内部类无须class关键字,而是在定义匿名内部类时直接生成该匿名内部类的对象。

由于匿名内部类不能是抽象类,所以匿名内部类必须实现它的抽象父类或接口里包含的所有抽象方法。

三 实战

1 点睛

当通过接口来创建匿名内部类时,匿名内部类不能显示创建构造器,因此匿名内部类里只有一个隐式的无参构造器,故new接口名后的括号里不能传入参数值。

如果通过继承父类来创建匿名内部类时,匿名内部类将拥有和父类相似的构造器,此处的相似指的是拥有相同的形参列表。

2 代码

3 运行

购买了一个电子示波器,花掉了67.8

匿名内部类的初始化块...

购买了一个键盘,花掉了56.2

当创建以Device为父类的匿名内部类时,既可以传入参数,代表调用父类带参数的构造器;也可以不传入参数,代表调用父类无参数的构造器。

当创建匿名内部类时,必须实现接口或抽象父类里的所有抽象方法。如果有需要,也可以重写父类中的普通方法。

四 实战

1 点睛

在Java 8之前,Java要求被局部内部类、匿名内部类访问的局部变量必须使用final修饰,从Java 8开始这个限制取消了,Java 8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相对于自动使用了final修饰。

2 代码

3 结果

8

4 说明

Java 8将这个功能称为“effectively final”,它的意思是对于被匿名内部类访问的局部变量,可以用final修饰,也可以不用final修饰,但必须按照有final修饰的方式来使用——也就是一次赋值后,以后不能重新赋值。

作者:cakincqm

来源:脚本之家

标签: #java的匿名内部类 #java匿名方法