栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我可以匿名将枚举子类化而不能最终类化?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我可以匿名将枚举子类化而不能最终类化?

根据JLS:

枚举类型是隐式最终的,除非它包含至少一个具有类主体的枚举常量。

在您的示例中,

VALUE
具有类主体,因此
E
不是隐式最终的。

编辑: 这是一个验证索赔的快速示例:

import java.lang.reflect.Modifier;public class Sandbox {  public enum E {    VALUE {};  }  public enum E2 {    VALUE;  }  public static void main(String[] args) {    System.out.println(E.class);    System.out.println(E.VALUE.getClass());    System.out.println("E.VALUE is subclass of E = " + E.VALUE.getClass().getSuperclass().equals(E.class));    System.out.println("E modifiers: " + Modifier.toString(E.class.getModifiers()));    System.out.println("E2 modifiers: " + Modifier.toString(E2.class.getModifiers()));  }}

从输出中可以看到,编译器正在将

final
修饰符添加到,
E2
但没有
E

class Sandbox$Eclass Sandbox$E$1E.VALUE is subclass of E = trueE modifiers: public staticE2 modifiers: public static final

编辑#2: 即使

E
final
和由子类
VALUE
,明确地试图把它扩大,如用
class Foo extendsE
或者
enum Bar extendsE
是根据编译时错误8.1.4。超类和子类:

如果ClassType将该类命名为Enum或对其进行任何调用,则是编译时错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号