scala 中 Any、AnyRef、Object、AnyVal 关系

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

总结:scala 语法规定了自己的继承体系(Any),这种体系不同于 java。

原文地址:https://www.cnblogs.com/wudeyun/p/12866340.html