Java回顾:匿名内部类

在 Java 中,匿名内部类(Anonymous Inner Class)是一种没有显式命名的局部内部类,它允许你在定义类的同时直接实例化该类。这种语法糖让代码更加简洁,特别适合创建只需要使用一次的实现类。

实现语法

  • 父类构造器:可以是普通类、抽象类或接口。
  • 类体:包含方法实现、字段定义等,但不能有显式的构造器。
new 父类构造器(参数列表) | 接口() {
    // 类的实现代码
};

常见使用场景

  1. 继承抽象类

    创建抽象类的匿名子类并实例化:

//1.有匿名内部类的情况
abstract class Animal {
    abstract void sound();
}

Animal cat = new Animal() {  // 继承抽象类
    @Override
    void sound() {
        System.out.println("喵喵~");
    }
};

cat.sound();  // 调用方法

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

//2.无匿名内部类

abstract class Animal {
    abstract void sound();
}

public class Ani_mal extends Animal {  //无匿名内部类时需要手动新建一个类继承
    @Override
    void sound() {
        System.out.println("喵喵~");
    }

}

Ani_mal cat = new Ani_mal();
cat.sound();

匿名内部类的特点

(1)隐式继承或实现
  • 匿名内部类必须继承一个父类或实现一个接口,但不能同时继承类和实现接口。
  • 只能继承一个父类或实现一个接口。
(2)没有显式的类名
  • 无法使用 new 关键字再次实例化,只能在定义时创建一个对象。
(3)访问外部成员
  • 可以访问外部类的final 变量(Java 8+ 允许访问事实上的 final 变量)。
  • 不能定义静态成员,因为匿名内部类是实例级别的。
(4)作用域局限
  • 匿名内部类的作用域仅限于定义它的代码块内。

 总结

匿名内部类是 Java 中一种灵活的语法糖,它允许你在需要的地方就地实现接口或继承类,避免创建大量冗余的命名类。

主要适用于:

  • 创建一次性使用的实现类。
  • 简化事件处理、回调函数等场景。
  • 避免代码中出现过多的命名类。

但在 Java 8 及以后,对于函数式接口,推荐使用更简洁的 Lambda 表达式替代匿名内部类。

 

     

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值