前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala:统一的对象模型

Scala:统一的对象模型

作者头像
Albert陈凯
发布2018-04-04 15:08:52
6320
发布2018-04-04 15:08:52
举报
文章被收录于专栏:Albert陈凯Albert陈凯

图片展示了Scala的类层次结构。每一个类都继承自scala.Any,Any的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承scala.AnyRef。

每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object。

需要注意的是值类型类空间是平行的,即所有的值类型都继承自scala.AnyVal,但是值类型之间不存在任何关系,比如继承关系。作为替代,值类型之间有视图(隐式类型转换)。

整个类层次最底层有两个类型,scala.Null和scala.Nothing。Null是所有引用类型的子类,它只有一个实例null。 由于Null不是任何值类型的子类,所以null也不是任何值类型的实例,因此把null赋值给int型变量是错的。Nothing是所有其它类型的子类,这个类没有任何实例,但是它可以作为类型参数体现价值,比如Nil就是List[Nothing]的实例,而Scala中List是协变的,从而对于所有的类型T,Nil 都是List[T]的实例。 测试List是协变的代码如下:

代码语言:javascript
复制
class Person 
class Student extends Person 
val lst: List[Person] = List[Student](new Student) //程序没有问题,可以说明List是协变的

关于==,equals,eq:在Scala中,==相当于是equals的别名,用于比较值是否相等,而eq 用于比较引用是否相等:

代码语言:javascript
复制
val a = List(1, 2, 3) 
val b: List[Int] = List(1, 2, 3) 
println(a == b) //true 
println(a equals b) //true 
println(a eq b) //false
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档