设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java匿名类 Java匿名内部类

发布时间:2022-07-10 11:15 所属栏目:51 来源:互联网
导读:匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: new 类或接口() { // 类的主体 }; 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块
  匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:
  new <类或接口>() {
      // 类的主体
  };
  这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。
 
  匿名类有两种实现方式:
  继承一个类,重写其方法。
  实现一个接口(可以是多个),实现其方法。
 
  下面通过代码来说明。
  public class Out {
      void show() {
          System.out.println("调用 Out 类的 show() 方法");
      }
  }
  public class TestAnonymousInterClass {
      // 在这个方法中构造一个匿名内部类
      private void show() {
          Out anonyInter = new Out() {
              // 获取匿名内部类的实例
              void show() {
                  System.out.println("调用匿名类中的 show() 方法");
              }
          };
          anonyInter.show();
      }
      public static void main(String[] args) {
          TestAnonymousInterClass test = new TestAnonymousInterClass();
          test.show();
      }
  }
  程序的输出结果如下:
  调用匿名类中的 show() 方法
  从输出结果可以看出,匿名内部类有自己的实现。
 
  提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。
 
  匿名类有如下特点:
 
  1)匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。
  public static void main(String[] args) {
      int a = 10;
      final int b = 10;
      Out anonyInter = new Out() {
          void show() {
              // System.out.println("调用了匿名类的 show() 方法"+a);    // 编译出错
              System.out.println("调用了匿名类的 show() 方法"+b);    // 编译通过
          }
      };
      anonyInter.show();
  }
  从 Java 8 开始添加了 Effectively final 功能,在 Java 8 及以后的版本中代码第 6 行不会出现编译错误,详情可点击《Java8新特性之Effectively final》进行学习。
 
  2)匿名类中允许使用非静态代码块进行成员初始化操作。
  Out anonyInter = new Out() {
      int i; {    // 非静态代码块
          i = 10;    //成员初始化
      }
      public void show() {
          System.out.println("调用了匿名类的 show() 方法"+i);
      }
  };
  3)匿名类的非静态代码块会在父类的构造方法之后被执行。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读