匿名内部类

匿名内部类



在这里插入图片描述
最后那个分号不要忘掉,不然就错了。

在这里插入图片描述

在这里插入图片描述

  • 8的例子
    在这里插入图片描述

基于接口的匿名内部类的例子:

在这里插入图片描述

在这里插入图片描述
实际上,底层就是用一个匿名内部类去实现了接口。然后对该类实例化了一个对象,并将这个对象赋给了tiger引用。
即== IA tiger = new Outer$01()==;

   //基于接口的匿名内部类
        //老韩解读
        //1.需求: 想使用IA接口,并创建对象
        //2.传统方式,是写一个类,实现该接口,并创建对象
        //3.老韩需求是 Tiger/Dog 类只是使用一次,后面再不使用
        //4. 可以使用匿名内部类来简化开发
        //5. tiger的编译类型 ? IA
        //6. tiger的运行类型 ? 就是匿名内部类  Outer04$1
        /*
            我们看底层 会分配 类名 Outer04$1
            class Outer04$1 implements IA {
                @Override
                public void cry() {
                    System.out.println("老虎叫唤...");
                }
            }
         */
        //7. jdk底层在创建匿名内部类 Outer04$1,立即马上就创建了 Outer04$1实例,并且把地址
        //   返回给 tiger
        //8. 匿名内部类使用一次,就不能再使用
        IA tiger = new IA() {
            @Override
            public void cry() {
                System.out.println("老虎叫唤...");
            }
        };

基于类的匿名内部类的例子:

在这里插入图片描述
此时的运行类型为Outer$02。
实际上,此时的底层就是用另外一个类去继承了father类。然后对该类实例化了一个对象,并将这个对象赋给了father引用。
Father father = new Outer$02

在这里插入图片描述
没有大括号的时候,此时的运行类型为Father,就和平时的实例化一个对象是一样的意思。

基于抽象类的匿名内部类,方法必须要给他进行重写实现

在这里插入图片描述

匿名内部类的直接使用,不再赋值给某个引用

在这里插入图片描述

  • 例子

在这里插入图片描述

最佳实践

在这里插入图片描述

public class InnerClass{
    public static void main(String[] args) {
        Cellphone cellphone = new Cellphone();
        cellphone.alarmclock(new Bell() {
            @Override
            public void ring() {
                System.out.println("懒猪起床了");
            }
        });
        cellphone.alarmclock(new Bell() {
            @Override
            public void ring() {
                System.out.println("小伙伴上课了");
            }
        });
    }
}


interface  Bell{
    public void ring();
}

class Cellphone{
    public void alarmclock(Bell bell){
        bell.ring();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值