Scala类的层级关系


一:介绍
在Scala里面每个类都继承自通用的名为Any的超类,因为每个子类都是Any的子类,所有定义在Any中的方法就是共同的方法,它可以被任何对象调用,Nothing是所有其它类的子类。


二:Scala的类层级

Any类中包括以下方法
  def equals(that: Any): Boolean
  def hashCode(): Int
  def toString(): String
  def getClass(): Class[_]
  final def ==(that: Any): Boolean
  final def != (that: Any): Boolean
  final def ##(): Int
  def isInstanceOf[T0]: Boolean
  def asInstanceOf[T0]: T0

也就是说Scala里的每个对象都可以调用== !=或equals等函数,但是由于个别函数是final修饰的,所以不能被重写。

Any类有两个子类,AnyVal和AnyRef。

AnyVal是Scala里每个内建值类的父类。有9个这样的值类:Byte,Short,Char,Int,Long,FLoat,Double,Boolean和Unit。其中前8个都是对应到Java的基本类型,由于这些类的实例都是写成字面量,所以不能使用new创造这些类的实例,Unit对应的大约就是Java的void类型,没有返回值。

值类不是其它类的子类,但是不同的值类之间可以隐士互相转换,需要时可以将Int类型转换成Long类型。
隐士转换还用来为值类型添加更多的功能,比如Int的max,min等,是Scala.Int类中没有的函数,是Scala.RichInt中的。这就是Scala.Int到Scala.RichInt的隐士转换。

AnyRef是Scala里面所有引用类的基类,也就是Java中Object的别名。

在Scala中,==和equasl是相同的,都是比较值,而在Java中==是比较的引用。
例如:
  /**
  * 定义的方法
  * @param x Int
  * @param y Int
  * @return Boolean
  */
  def isequal(x:Int,y:Int) = x == y

  /**
  * 函数字面量的形式
  */
  val iseq = (x:Any,y:Any) => x == y

  输出都是true。

但是Scala中也提供了判断引用相等的函数,就是eq 和Java的==功能相同,对用的反义词是ne。
例如:

  val t = new String("abc")
  val t2 = new String("abc")
  print(t eq t2)

答案是false。

转载于:https://www.cnblogs.com/lyr999736/p/11172266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值