Java:匿名内部类

匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:

  1. new<类或接口>()
  2. {
  3. //类的主体
  4. };

这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。

匿名类有两种实现方式:

  • 继承一个类,重写其方法。
  • 实现一个接口(可以是多个),实现其方法。


下面通过代码来说明。

  1. public class Out
  2. {
  3. void show()
  4. {
  5. System.out.println("调用 Out 类的 show() 方法");
  6. }
  7. }
  8. public class TestAnonymousInterClass
  9. {
  10. //在这个方法中构造一个匿名内部类
  11. private void show()
  12. {
  13. Out anonyInter=new Out()
  14. {
  15. //获取匿名内部类的实例
  16. void show()
  17. {
  18. System.out.println("调用匿名类中的 show() 方法");
  19. }
  20. };
  21. anonyInter.show();
  22. }
  23. public static void main(String[] args)
  24. {
  25. TestAnonymousInterClass test=new TestAnonymousInterClass();
  26. test.show();
  27. }
  28. }

运行结果如下:

调用匿名类中的 show() 方法

从输出结果可以看出,匿名内部类有自己的实现。


提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。

匿名类有如下特点。

(1) 匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。

  1. public static void main(String[] args)
  2. {
  3. int a=10;
  4. final int b=10;
  5. Out anonyInter=new Out()
  6. {
  7. void show()
  8. {
  9. //System.out.println("调用了匿名类的 show() 方法"+a); //编译出错
  10. System.out.println("调用了匿名类的 show() 方法"+b); //编译通过
  11. }
  12. };
  13. anonyInter.show();
  14. }

(2) 匿名类中允许使用非静态代码块进行成员初始化操作。

  1. Out anonyInter=new Out()
  2. {
  3. int i;
  4. { //非静态代码块
  5. i=10; //成员初始化
  6. }
  7. public void show()
  8. {
  9. System.out.println("调用了匿名类的 show() 方法"+i);
  10. }
  11. };

(3) 匿名类的非静态代码块会在父类的构造方法之后被执行。

猜你喜欢

转载自blog.csdn.net/weixin_44015669/article/details/91129909