首页 > 其他 > 详细

scala 中 Any、AnyRef、Object、AnyVal 关系

时间:2020-05-11 00:40:47      阅读:165      评论:0      收藏:0      [点我收藏+]
  1. Any,是 scala 中的抽象类,不能实例化
  2. AnyRef 继承于 Any,它是一个 trait
  3. AnyVal 继承于 Any,它是一个抽象类,目的是消除基本类型,scala中只有引用类型,仅此作用
  4. Any、Object 定义上没有任何关系
  5. AnyRef、Object 定义上没有任何关系
  6. scala 的继承体系是通过 Any、AnyRef  实现的。为了兼容 java 的 Object 继承体系,将 AnyRef 置于与 Object 同等地位,即二者的  Class 类型相同。这样凡是 Object 继承体系的子类,都是  AnyRef  的子类;相反 AnyRef 继承体系生成的子类,也是 Object 的子类。这样 Object 的子类,可以被 AnyRef 子类继承或者实现,因为它是 AnyRef。同样,AnyRef 的子类,也可以被 Object 子类继承或者实现,因为它是 Object。这样两套继承体系兼容。
  7. 因为 scala 将 AnyRef 置于与 Object 同等的地位,所以从继承关系上来说,scala将 Any 置于 Object 的父类位置。从 scala 语法上来说是这样,但是对于 jvm 来说,Object 是顶级类,所以,scala 必然将 Any编译为 Object,即 Any 实质是 Object。从 scala 语法层面,Any 是 Object 的父类。实际上任何 Any 的子类,也必然编译为 Object 的子类。Any 只是名义上的顶级,仅此而已。

总结:从 scala 层面,Any  顶级,AnyRef、Object 是子类且不同。 从 jvm 层面,Object 顶级, Any、AnyRef 是子类,且不同。

 

scala 中 Any、AnyRef、Object、AnyVal 关系

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!