Scala学习笔记(11)-Scala的层级

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

根类Any有两个子类:AnyVal和AnyRef。AnyVal是Scala里每个内建值类的父类。有九个这样的值类:Byte,Short,Char,Int,Long,Float,Double,Boolean和Unit。其中的前八个对应到Java的原始类型,它们的值在运行时表示成Java的原始值。Scala里这些类的实例都写成文本。例如,42是Int的实例,'x'是Char的实例,false是Boolean的实例。你不能使用new创造这些类的实例。这一点被“小伎俩”,值类都被定义为即是抽象的又是final的,强制贯彻。

另一个值类,Unit,大约对应于Java的void类型;被用作不返回任何有趣结果的方法的结果类型。Unit只有一个实例值,被写作()

类Any的另一个子类是类AnyRef。这个是Scala里所有引用类的基类。在Java平台上AnyRef实际就是类java.lang.Object的别名。

存在AnyRef别名代替使用java.lang.Object名称的理由是,Scala被设计成可以同时工作在Java和.Net平台。在.NET平台上,AnyRef是System.Object的别名。

类Null是null类型的引用;它是每个引用类(就是说,每个继承自AnyRef的类)的子类。Null不兼容值类型。你不可,比方说,把null值赋给整数变量:

类型Nothing在Scala的类层级的最底端;它是任何其它类型的子类型。然而,根本没有这个类型的任何值。要一个没有值的类型有什么意思呢?7.4节中讨论过,Nothing的一个用处是它标明了不正常的终止。例如Scala的标准库中的Predef对象有一个error方法,如下定义:

def error(message:String): Nothing = throw new RuntimeException(message) 
error的返回类型是Nothing,告诉用户方法不是正常返回的(代之以抛出了异常)

Scala层级图

Scala学习笔记(11)-Scala的层级_第1张图片

你可能感兴趣的:(Scala学习笔记(11)-Scala的层级)