Scala:统一的对象模型


图片展示了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是协变的代码如下:

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

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是对Scala语言的基本语法的一个学习总结,共包括如下章节: 基本元素 结构化语句 数据类型 小结 参考资料:...
    我是老薛阅读 991评论 0 3
  • Scaladoc是什么:scala api文档,包含了scala所有的api以及使用说明,class、object...
    义焃阅读 2,655评论 0 1
  • scala 是一个强类型的语言,但是在编程时可以省略对象的类型. java中对象类型(type)与类(class)...
    Tim在路上阅读 2,899评论 0 2
  • 控制复杂性是计算机编程的本质。-- Brian Kernigan Scala继承体系结构设计非常巧妙,它没有特殊地...
    刘光聪阅读 3,157评论 0 8
  • 1. 特点: Scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性。 Scala运行在虚拟机上...
    EmmaQin阅读 1,348评论 0 0