Scala继承层次结构图:
上图来自《 Scala,为不耐烦的人》一书显示,所有Java类都是AnyRef
类的子类。
图8–1显示了Scala类的继承层次结构。与Java中的原始类型相对应的类以及类型Unit
扩展了AnyVal
。所有其他类都是AnyRef
类的子类,它是Java或.NET虚拟机中Object
类的同义词。
AnyVal
和AnyRef
都扩展了Any
类,它是层次结构的根。
在不更改Java类的情况下如何实现的?在字节码级别上需要处理吗?
最佳答案
免责声明:我绝对不是Scala专家,但是拥有20年的Java经验,包括JVM。
我的解释是
所有其他类都是AnyRef类的子类,
Java 或.NET虚拟机中Object类的同义词。
(重点是我的)完美地解释了它。
对于JVM,没有AnyRef
类。文本称AnyRef
为同义词,而JVM没有这样的概念。因此,可能是Scala编译器将AnyRef
替换为java.lang.Object
。当然,所有Java类都是java.lang.Object
的子类,它在Scala编译器中刚刚获得了一个新名称,因此使它们全部继承自AnyRef
(又称为Object
)
我敢打赌,您不会在任何Scala运行时JAR库中找到AnyRef.class
条目,这意味着对于JVM,不存在像AnyRef
这样的类。