scala系列之类层级关系

一.scala层级结构图

  scala语言中所有的类都继承自一个共同的超类Any,是scala类层级的根节点,在其下面有两个子类:AnyVal和AnyRef,其中AnyVal是Scala中所有值类的超类,AnyRef是scala中引用类的超类。而在scala类层级的底部分布着两个特殊的类:NULL类和Nothing类,NULL类属于引用对象类型,位于引用类层级底部,是所有引用类的子类,而Nothing位于Scala类层级的最低端,代表着它是所有类的子类型,具体的层级分布关系如下图所示(图片来自scala编程书籍):
这里写图片描述

上图代表着scala整体的类层级分布关系,接下来具体介绍类层级关系图中各个层级的情况。

二.Any类综述

参考Scala API文档可以知道,Any类是一个抽象类,包含了以下几个方法:
这里写图片描述
其中部分方法定义为final,是不允许子类进行重写的,如==,!=,没有加final的方法在继承的时候可以实现改写,如具体情况下可能需要改写equals方法和hashCode方法以实现想要达到的对象相等性。这里关于对象间相等性比较方法如==,equals等的区别可以参考我的另一篇博客scala中==,equals,eq与ne比较

三.AnyVal类综述

首先看一下scala API文档中AnyVal的介绍,如下图:
这里写图片描述

可以看出,AnyVal是一个继承了Any的抽象类,它下面包含9个标准的子值类型:Double,Float,Long,Int,Char,Short,Byte,Boolean和Unit,这些类都是抽象类且是final的,故不能直接使用new关键字来创建它们的实例。在scala中这些类的实例都写成字面量,如2是Int类的实例。特别的是这里的Unit类只有一个实例:()

四.AnyRef类综述

首先看一下scala API文档中AnyRef的介绍,如下图:
这里写图片描述

同样的,AnyRef类也是一个抽象类,是所有引用类的基类,类似于Java语言中的Object类。

五.底层类型类Null和Nothing

首先看一下scala API文档中Null的介绍,如下图:
这里写图片描述
Null是抽象的final类,是一种引用对象类型,也是所有引用类的子类,具有唯一的实例null,它不是值类的子类,因此不能将null值赋给值类型变量,如val i:Int = null 是错误的。

scala API文档中对Nothing类的解释如下:
这里写图片描述

可以看出,Nothing类是所有类的子类型,但是Nothing类却不存在任何实例。Nothing的主要用处体现在两个地方:

  1. 在定义空列表Nil时使用,Nil是一种List[Nothing]类型的列表
  2. 作为方法不正常返回的返回类型使用。如scala编程中提供的例子:`
    def error(msg:String):Nothing={
    throw new RuntimeException(msg)
    }

    def divide(x: Int, y: Int): Int ={
    if (y != 0) x / y
    else error(“can’t divide by zero”)`
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值