打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java匿名类,Java匿名内部类

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

new <类或接口>() { // 类的主体};123复制代码类型:[java]

  这种形式的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();
 }
}123456789101112131415161718192021复制代码类型:[java]

    程序的输出结果如下:

调用匿名类中的 show() 方法1复制代码类型:[java]

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

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

    匿名类有如下特点:

    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();
}1234567891011复制代码类型:[java]

    从Java8开始添加了Effectivelyfinal功能,在Java8及以后的版本中代码第6行不会出现编译错误。

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

Out anonyInter = new Out() { int i; { // 非静态代码块
  i = 10; //成员初始化
 } public void show() {
  System.out.println("调用了匿名类的 show() 方法"+i);
 }
};12345678复制代码类型:[java]

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java Lambda表达式入门
Java中的匿名内部类:由setOnClickListener说起
Java中多线程使用匿名内部类的方式进行创建3种方式
java中类的继承特点
java之AnnoInnerClass(匿名内部类)
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服