scala 中 Any、AnyRef、Object、AnyVal 关系
2024-08-31 18:32:38
- Any,是 scala 中的抽象类,不能实例化
- AnyRef 继承于 Any,它是一个 trait
- AnyVal 继承于 Any,它是一个抽象类,目的是消除基本类型,scala中只有引用类型,仅此作用
- Any、Object 定义上没有任何关系
- AnyRef、Object 定义上没有任何关系
- scala 的继承体系是通过 Any、AnyRef 实现的。为了兼容 java 的 Object 继承体系,将 AnyRef 置于与 Object 同等地位,即二者的 Class 类型相同。这样凡是 Object 继承体系的子类,都是 AnyRef 的子类;相反 AnyRef 继承体系生成的子类,也是 Object 的子类。这样 Object 的子类,可以被 AnyRef 子类继承或者实现,因为它是 AnyRef。同样,AnyRef 的子类,也可以被 Object 子类继承或者实现,因为它是 Object。这样两套继承体系兼容。
- 因为 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 是子类,且不同。
最新文章
- 12-rm 命令总结
- Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) A. Checking the Calendar(水题)
- Android BaseAdapter 数据和显示之间的Adapter 接口
- php中并发读写文件冲突的解决方案(文件锁应用示例)
- C++十进制转换为二进制
- SPA初试-1
- Yii框架-Smarty-整合
- NSString截取文件名(很笨的方法)
- 0118——UILabel和导入字体
- Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
- 记录一次参加D2前端技术论坛的杭州之行
- jquery中的事件与应用
- MySQL · 引擎特性 · InnoDB 数据页解析
- typora画图
- koa 学习1
- MySQL查询本周、上周、本月、上个月份数据的sql脚本
- linux 中的 open() read() write() close() 函数
- Android使用腾讯浏览服务X5内核
- tensorflow学习总结之reduce_sum函数
- AdapterViewFlipper功能 自动播放的图片库