zoukankan      html  css  js  c++  java
  • Scala的类层级讲解

    Scala的类层级

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

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

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

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

    类层级图如下:

    image

    Any类

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

    final def ==(that: Any): Boolean
    final def !=(that: Any): Boolean
    def equals(that: Any): Boolean
    def hashCode: Int
    def 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的一个用处是它标明了不正常的终止。

  • 相关阅读:
    vue-打包文件解析
    vue-动态路由
    vue-代码跳转路由
    vue-<routerl-link>属性补充
    vue-默认路由重定向和路由模式的切换
    vue-配置路由规则和显示路由
    路由器实验之Serial接口的静态路由配置
    交换机实验之交换机基本配置、交换机端口的基本配置、管理MAC地址表
    数据库表结构(字段信息等)导出Word,Excel,HTML,CHM等格式
    《数据库系统概论》学习总结——附件四(数据库实验(ADO.NET实现数据库操作))
  • 原文地址:https://www.cnblogs.com/clockq/p/9365633.html
Copyright © 2011-2022 走看看