- Any,是 scala 中的抽象类,不能实例化
- AnyRef 继承于 Any,它是一个 trait
- AnyVal 继承于 Any,它是一个抽象类,是对 primary 类型的一个封装,唯一的作用就是消灭 primary 类型
- Any、Object 定义上没有任何关系
- AnyRef、Object 定义上没有任何关系
- scala 的继承体系是通过 Any、AnyRef 实现的。为了兼容 java 的继承体系,scala 编译器将 AnyRef 置于与 Object 同等地位,即二者的 Class 类型相同。凡是 Object 继承体系的子类,都是 AnyRef 的子类,而 AnyRef 继承体系生成的子类,也是 Object 的子类。这些子类既是 AnyRef 又是 Object。scala 编译器保证了对 java 语言的兼容。
- scala 让编程者感觉 Any 类是 scala 的顶级父类。作为 jvm 来说,Object 才是顶级父类,scala 编译器必然将 Any、AnyRef 编译为 Object 的子类型,这是 scala 编译器来实现的。这是 scala 编译器对编程者的欺骗。
总结:scala 语法规定了自己的继承体系(Any),这种体系不同于 java。