匿名内部类特点及注意

匿名内部类的特点及注意:

  1. 匿名内部类也就是没有名字的内部类,无class关键字,直接使用new来生成一个对象的引用正因为没有名字,所以匿名内部类只能使用一次
  2. 匿名内部类还有个前提条件:必须继承一个父类(抽象类,普通类)或实现一个接口(两者不可兼得,并且只能是一个),它相当于一个具体类(只是没有名字),所以可以使用new
  3. 不能存在任何的静态成员变量和静态方法。
  4. 不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。 无构造函数,使用构造(空白)代码块进行初始化
  5. 当所在的方法的形参需要被内部类里面使用时,该形参必须为final,为了拷贝引用避免引用值发生改变

稍微说下new时的情况:

new 一个匿名内部类、接口或者抽象类实际上是执行3步的合并,即:
a.先定义一个子类,让该子类继承上述接口或实现上述抽象类;
b.然后new一个该子类的对象;
c.将该子类的一个引用赋值给接口或者抽象类变量(它是依据java多态特性:父类指向子类的引用)。

所以我个人觉得new不是对抽象类(普通类)或接口直接new的,而是对继承他的子类new的。它的名字是外部类名字$1,如Test$1

为什么我们使用匿名内部类:

  1. 实现伪多重继承
  2. 方便定义回调
  3. 对于其他类来说能够隐藏起来

PS.

内部类的介绍
加深理解匿名内部类
形参为什么是final详解

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java匿名内部类是一种没有显式定义名称的内部类。它通常在实例化接口抽象类或具体类的同时实现其中的方法。匿名内部类的定义最本质的特点是一个类是一个内部类,该类没有名字,但系统会分配一个代号在内存中。匿名内部类的应用场景主要是在需要临时实现某个接口或类的方法时使用。 通过示例代码可以看到,在使用匿名内部类时,我们没有实例化接口的类,但是实现了接口中的方法。因此,这个类被临时创建并在内存中存在一个系统设定的代号。我们可以通过调用该类的方法来访问其功能。 相比之下,按照传统的方式,我们需要先定义一个具体的类或接口的实现类,然后调用该类的方法才能实现相同的功能。 需要注意的是,使用匿名内部类时,我们只能使用一次,并且无法在其他地方重用。此外,匿名内部类不能有构造函数,因为它没有类名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java的匿名内部类详细解读](https://blog.csdn.net/xueyukun1/article/details/121412738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值