内部类(匿名内部类)Anonymous

1.它本质上还是一个类

2.它还是一个内部类(如同内部类一样,他是定义在外部类的局部当中,方法或者代码块中)

3.它是匿名的 无名字的

4.同时它还是一个对象

 ——该图片来源自,韩顺平老师的java课

一.基于接口的匿名内部类

当我们要使用一个类的时候,要创建对象,但是当我们只是用一次的时候,这时候我们就要使用匿名内部类来简化开发

常规情况下我们调用一个基于接口的类的时候

public class AnonymousInter {
    public static void main(String[] args) {
        IA tiger = new Tiger();
        tiger.cry();

    }
}
interface IA{
     void cry();
}
class Outer01{
    private  int n1 = 10;
    public void method(){

    }
}

class Tiger implements IA{

    @Override
    public void cry() {
        System.out.println("tiger is cry");
    }
}
class Father{
    public Father() {
    }
    public void test(){

    }
}

但是当我们用类匿名内部类的方法的时候

 对比之前的调取用可以发现,在本次使用cry这个方法中我们并没用创建一个tiger类

而是直接使用了一个匿名内部类

并且对于我们所调用的这个对象tiger他的编译类型 可以看等号左边 毫无疑问就是IA这个接口,

但是它的运行类型 等号右边的那个 IA()是什么什么类型呐???

 

 这就是我们tiger.getClass()的运行结果

可以很明显的看到他的运行类型是,它的外部类的名字后面加了一个   $1  的符号

他就是我们所说的匿名内部类

 --------------------------------------------------------------------------------------------------------------------------------

并且这个匿名内部类他是系统在底层自动给分配的一个类,不能直接调用

上图中的xxxx(Outer$1)则是系统底层自动创建的匿名内部 然后将匿名内部类的地址返回给之前创建tiger对象(匿名对象只能使用一次,是一次性的,不能重复使用),但是tiger这个对象可以反复调用

二.基于类的匿名内部类

类似于基于接口的匿名内部类的创建

当然也是在jdk 底层创建的一个匿名内部类,同样是一次性使用,但是创建的对象father可以一直使用

3.基于抽象类的匿名内部类(abstract)

 三.一些细节

 

 诸多细节与局部内部类相似

四。匿名内部类的实际应用

1.可以将匿名内部类当作参数进行传递

 这样的方法省去了再单独创建一个类\接口的时间,并且灵活性得到提升

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凑凑洗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值