在java匿名类中实现这些规则有什么原因吗

在java匿名类中实现这些规则有什么原因吗,java,Java,据我所知,普通类和匿名类的区别是: 匿名类无法实现多个接口,而常规类可以实现 匿名类不能同时扩展类和实现接口 而普通班可以 匿名类没有名称,而常规类有名称 匿名类无法定义构造函数,因为匿名类没有名称,而常规类可以 在匿名类中实现这些规则有什么原因吗 匿名类的静态字段必须是常量 接口不能是匿名类的成员 静态块/初始值设定项不能在匿名类中使用 因为JLS说: 匿名类始终是内部类();它从来不是静态的(,) JLS表示: 如果内部类声明静态初始值设定项(),则是编译时错误 如果内部类声明的成员是

据我所知,普通类和匿名类的区别是:

  • 匿名类无法实现多个接口,而常规类可以实现
  • 匿名类不能同时扩展类和实现接口 而普通班可以
  • 匿名类没有名称,而常规类有名称
  • 匿名类无法定义构造函数,因为匿名类没有名称,而常规类可以
在匿名类中实现这些规则有什么原因吗

  • 匿名类的静态字段必须是常量
  • 接口不能是匿名类的成员
  • 静态块/初始值设定项不能在匿名类中使用
  • 因为JLS说:

    匿名类始终是内部类();它从来不是静态的(,)

    JLS表示:

    如果内部类声明静态初始值设定项(),则是编译时错误

    如果内部类声明的成员是显式或隐式的
    静态的
    ,则这是编译时错误,除非该成员是常量变量()

    请注意,接口是隐式的
    静态的

    另见问题:


    “匿名类没有名称”是一个重言式,没有语法支持前四点的其余部分。感谢您指出这一点!我不太阅读JLS文档,因为它太技术化,文档本身也太吓人。