匿名内部类

匿名内部类的介绍

  • 匿名内部类是一个非常特殊的内部类,从命名可以看出,匿名内部类是没有类名,一般来说这个内部类只能用一次。
  • 有什么场景可以使用呢?匿名内部类一般用于简化代码,当要快速实现一个抽象类或者接口的抽象方法时,我们就可以使用匿名内部类来简化,可以不用专门定义一个有名类来操作。
  • 有上述可知,要使用匿名内部类,必须要有一个父类或者父接口。

匿名内部类的定义格式

  • new 类名/接口名() { }

特点分析

  • 该匿名内部类大括号就是某一个类的子类或者接口的实现类
  • 该格式体现的不仅是一个类,同时还是一个对象

匿名内部类的使用

  • 使用父类型变量多态接受该匿名子类对象
  • 以匿名对象的方式使用
    • 直接调用方法使用
    • 当做方法的参数传递
    • 当做方法的返回值使用
public class Test2 {
    public static void main(String[] args) {
        /*1 使用父类型变量多态接受该匿名子类对象*/
        Flyable f1 = new Flyable() {
            @Override
            public void fly() {
                System.out.println("不知道什么在飞111");
            }
        };
        f1.fly(); // 不知道什么在飞111

        /*2 直接调用方法使用*/
        new Flyable() {
            @Override
            public void fly() {
                System.out.println("不知道什么在飞222");
            }
        }.fly(); // 不知道什么在飞222

        /*3 当做方法的参数传递*/
        showFlyable(new Flyable() {
            @Override
            public void fly() {
                System.out.println("不知道什么在飞333");
            }
        });

        /*4 当做方法的返回值使用*/
        Flyable f2 = getFlyable();
        f2.fly(); // 不知道什么在飞444
    }


    public static void showFlyable(Flyable flyable) {
        flyable.fly();
    }

    public static Flyable getFlyable() {
        return new Flyable() {
            @Override
            public void fly() {
                System.out.println("不知道什么在飞444");
            }
        };
    }
}

// 接口
interface Flyable {
    public abstract void fly();
}

匿名内部类的前提条件

  • 有一个父类(可以是抽象类也可以是非抽象类, 匿名内部类相当于是其子类)或者父接口(匿名内部类相当于是其实现类)
  • 如果匿名内部类是基于抽象类或接口的, 那么它需要实现抽象类或接口的所有抽象方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值