Java匿名内部类的限制

  • 没有名字。

    实际上编译器会指定名字,一般是 :外部类名称 + $ + 匿名类顺序 。

  • 只能继承一个父类或实现一个接口。

    匿名类由父类或接口直接派生,Java语法不允许同时继承父类和实现接口,kotlin可以。

  • 父类是非静态的类型,则需父类外部实例来初始化。

  • 如果定义在非静态作用域内,会引用外部实例。

  • 只能使用外部作用域内的final变量。

    匿名内部类会持有一份该变量的引用,为了防止变量变化引起歧义,故要求final保持不变。

  • 创建时只有单一方法的接口可用lambda表达式。

你可能感兴趣的:(Java匿名内部类的限制)