安卓中那些 面试官 最爱问的看似简单实则暗藏玄机的问题(二)

Java 的匿名内部类有哪些限制?

无处不在的匿名内部类

button.setOnClickListener(new OnClickListener(){

});

在虚拟机中,匿名内部类有名字, OuterClass$1 

class RunnableFoo extends Foo implements Runnable{

};

匿名内部类不能这样写,但是局部类可以,但是kotlin可以这样写  val runnableFoo = object: Foo(), Runnable{}

匿名内部类的构造方法,  编译器生成  ,  参数列表包括

1、外部对象(定义在非静态域内)

2、父类的外部对象(父类非静态)

3、父类的构造方法参数(父类有构造方法且参数列表不为空)

4、外部捕获的变量(方法体内有引用外部 final 变量)

匿名内部类容易引起 内存泄漏 

总结 

1、没有人类认知意义上的名字

2、只能继承一个父类货值实现一个接口

3、父类是非静态的类型,择需父类外部实例来初始化

4、如果定义在非静态作用域内,会引用外部类实例

5、只能捕获外部作用域内的 final  变量

6、创建时只有单一方法的接口可以用 lambda 转化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值