scala 中 Any、AnyRef、Object、AnyVal 关系
- 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 是子类,且不同。
scala 中 Any、AnyRef、Object、AnyVal 关系的更多相关文章
- Scala中class、object、case class、case object区别
/** class.object.case class.case object区别 * * class 类似Java中的class: * object Scala不能定义静态成员,用定义单例对象代之: ...
- Scala中class和object的区别
1.class scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C ...
- Python面试题之Python中type和object的关系
知乎上看到的提问: 两个是互为实例的关系,但不是互为子类的关系,只有type是object的子类,反之则不成立. 大牛说两者是蛋生鸡鸡生蛋的关系,但我还是不明白,有懂的麻烦解释一下, 希望不要给出外文 ...
- python 中type和object的关系
转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...
- Scala中 object 和 class的区别
object 在scala中没有静态方法和静态字段,所以在scala中可以用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString.对象的构造器在第一 ...
- Scala中的类和对象
类的定义 使用class定义 类的字段 在类中使用var,val定义字段 类的方法 scala中,使用var定义字段默认提供setter和getter方法对应名称为 value_= 和value /* ...
- 大数据学习之Scala中main函数的分析以及基本规则(2)
一.main函数的分析 首先来看我们在上一节最后看到的这个程序,我们先来简单的分析一下.有助于后面的学习 object HelloScala { def main(args: Array[String ...
- Programming In Scala笔记-第十一章、Scala中的类继承关系
本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...
- Scala 中object和class的区别
Scala中没有静态类型,但是有有“伴侣对象”,起到类似的作用. Scala中类对象中不可有静态变量和静态方法,但是提供了“伴侣对象”的功能:在和类的同一个文件中定义同名的Object对象:(须在同一 ...
随机推荐
- Daily Scrum 1/5/2015
Process: Zhaoyang: Fix some crash bugs and increase the program stability. Yangdong: Complete some b ...
- W - Palindrome HDU - 1513
题目大意: 插入最少的字符,使原字符串成为回文串. 题解: LCS问题,将字符串反转,然后求这俩字符串的LCS,总长度减去LCS即可(多组输入). N最大是5E3,直接用二维数组会超内存.所以要用到滚 ...
- search(6)- elastic4s-CRUD
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作.在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: //删除索引 val rspExists ...
- js的中文英文排序
本例主要实现 中文汉字按拼音排序的方法和英文按照首字母排序的方法. //要排序的数据 let data = [ {chinese: '蔡司', english: 'Chase'}, {chinese: ...
- awd平台搭建
1.先是使用 https://github.com/m0xiaoxi/AWD_CTF_Platform 这个平台搭建 这个平台很好用,是python脚本自动搭建,基本不需要怎么更改,自带了四道题的源码 ...
- Java多台中成员访问特点
多态中的成员访问特点: A:成员变量 编译看左边,运行看左边 B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化 C:成员方法 编译看左边,运行看右边.//因为调用对象时,子 ...
- [机器学习实战-Logistic回归]使用Logistic回归预测各种实例
目录 本实验代码已经传到gitee上,请点击查收! 一.实验目的 二.实验内容与设计思想 实验内容 设计思想 三.实验使用环境 四.实验步骤和调试过程 4.1 基于Logistic回归和Sigmoid ...
- thinkphp5 不使用form,用input+ajax异步上传图片
不支持$this->request->file()获取图片 后台接收文件请使用$_FILE 正文开始: HTML <div class="upload"> ...
- memcache的缓存原理和应用
缓存原理 Memcache采用键值对存储方式.它本质是一个大的 hash表,key的最大长度为255个字符,最长过期时间为30天.它的内存模型如下:Memcache预先将可支配的内存空间进行分区(Sl ...
- Hawkeye部署Github监控系统
2019独角兽企业重金招聘Python工程师标准>>> step1:python环境安装 #pwd /usr/local/soft #wget https://www.python. ...