博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala的类层级讲解
阅读量:7106 次
发布时间:2019-06-28

本文共 1161 字,大约阅读时间需要 3 分钟。

Scala的类层级

Scala里,每个类都继承自通用的名为Any的超类。

因为所有的类都是Any的子类,所以定义在Any中的方法就是“共同的”方法:它们可以被任何对象调用。

Scala还在层级的底端定义了一些类,如NullNothing,扮演通用的子类。

即,Any是所有其他类的超类,Nothing是所有其他类的子类。

类层级图如下:

image

Any类

层级的顶端是Any类,定义了下列方法:

final def ==(that: Any): Booleanfinal def !=(that: Any): Booleandef equals(that: Any): Booleandef hashCode: Intdef toString: String

解释:因为每个类都继承自Any,所以Scala程序里的每个对象都能用==、!=或equals比较,用hashCode做散列,以及用toString格式化。

AnyVal, Unit和AnyRef

根类Any有两个子类:AnyVal和AnyRef。

AnyVal

AnyVal是Scala里每个内建++值类++的父类。有9个这样的值类:Byte、Short、Char、Int、Long、Float、Double、Boolean和Unit。

Unit

Unit只有一个实例值,写成()。

所有的值类都是scala.AnyVal的子类型,但是它们不是其他类的子类。但是不同的值类类型之间可以隐式地互相转换。

例如,需要的时候,类scala.Int的实例可以通过隐式转换放宽到类scala.Long的实例;Int支持min、max、until、to、abs等操作,其实是从类Int隐式转换到scala.runtime.RichInt的。

AnyRef

AnyRef类是Scala里所有引用类(reference class)的基类。

++它其实是Java平台上java.lang.Object类的别名++。因此Java里写的类和Scala里写的都继承自AnyRef。

Scala类与Java类的不同在于它们还继承自一个名为ScalaObject的特质。目的是要通过ScalaObject包含的Scala编译器定义和实现的方法让Scala程序的执行更高效。

scala.Null和scala.Nothing

Scala是用统一的方式处理Scala静态类型系统的某些“边界情况”的特殊类型。

Null

Null类是null引用对象的类型,它是每个引用类(继承自AnyRef的类)的子类。Null不兼容值类型。

Nothing

Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。然而,根本没有这个类型的任何值。Nothing的一个用处是它标明了不正常的终止。

转载地址:http://lujhl.baihongyu.com/

你可能感兴趣的文章
silverlight 不能输入中文问题
查看>>
Vue自带的过滤器
查看>>
微软职位内部推荐-SDEII
查看>>
CocoaPods 安装的第三方删除
查看>>
jsonk可以传递boolean
查看>>
编程常见命名规范
查看>>
windows7系统配置maven环境
查看>>
浅谈第三方电子支付平台测试方法的研究
查看>>
【DOM编程艺术】滑过高亮显示 highLightRows
查看>>
如何设置静态内容缓存时间
查看>>
iOS开发多线程篇—多线程简单介绍
查看>>
使用PHP QR Code生成二维码
查看>>
日志统计 尺取法【蓝桥杯2018 C/C++ B组】
查看>>
移动web开发规范
查看>>
myeclipse操作记录
查看>>
$http设置headers来实现IE不缓存url请求的资源
查看>>
codeforces 381 D Alyona and a tree(倍增)(前缀数组)
查看>>
ISO7220M芯片调试总结
查看>>
系统中纹波大
查看>>
GPS经纬度转换为百度坐标
查看>>