什么是匿名内部类?怎样创建匿名内部类?

匿名内部类是没有名称的内部类。在Java中调用某个方法时,如果该方法的参数是接口类型,除了可以传人个接口实现类外,还可以使用实现接口的匿名内部类作为参数,在匿名内部类中直接完成方法的实现。创建匿名内部类的基本语法格式如下:

new父接口( ) {//匿名内部类实现部分

下面通过一个案例学习匿名内部类的定义和使用,如文件4-23所示。

interface Animal {

roid shout ();

public class Example23{

public static void main (String[] args) {

String name = “小花”;

animalShout (new Animal (){

@Override

public void shout() {

System.out.println (name+"喵喵.......") ;

}) ;

public static void animalShout (Animal an) {

an.shout );

 }

 }

文件4-23的运行结果如图4-23所示。

图4-23文件4-23的运行结果

文件4-23中,第1~3行代码创建了Animal接口;

第7~12行代码是调用animalShout( )方法,将实现Animal接口的匿名内部类作为animalShout( )方法的参数,并在匿名内部类中重写Animal接口的shout( )方法。

需要注意的是,在文件4-23中的匿名内部类中访问了局部变量name,而局部变量name并没有使用final修饰符修饰,程序也没有报错。这是JDK8的新增特性,允许在局部内部类、匿名内部类中访问非final修饰的局部变量,而在JDK8之前,局部变量前必须加final修饰符,否则程序编译时报错。

对于初学者而言,可能会觉得匿名内部类的写法比较难理解,下面分两步介绍匿名内部类的编写,具体如下。

在调用animalShout()方法时,在方法的参数位置写上new Animal ( ) {},这相当于创建了一个实例对象,并将对象作为参数传animalShout( )方法。在new Animal( )后面有一对大括号,表示创建的对象为Animal的子类实例,该子类是匿名的,具体代码如下:

animalShout (new Animal () {}) ;

(2)在大括号中编写匿名子类的实现代码,具体如下:

animalShout (new Animal ( ) {public void shoutSustem.out.println (“喵喵.....”);} });

至此便完成了匿名内部类的编写。匿名内部类是实现接口的种简便写法,在程序中不定非要使用匿名内部类。对于初学者而言,不要求完全掌握这种写法,只需理解语法就可以。

什么是匿名函数?匿名函数和普通函数有哪些区别?

什么是静态内部类?怎样定义静态内部类

什么是成员内部类?案例演示成员内部类的使用

怎样使用 this关键字调用本类?【案例演示】

传智教育java后端开发工程师培训

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253996.html

(0)
上一篇 2022年5月9日
下一篇 2022年5月9日

相关推荐

发表回复

登录后才能评论