第11章 Scala的继承关系

第11章 scala的继承关系

1 scala的类继承关系

在这里插入图片描述
scala继承关系的顶部是Any(源码位于src\library-aux\scala\Any.scala)类,定了如下方法

final def ==(that: Any): Boolean = this equals that
final def != (that: Any): Boolean = !(this == that)
def equals(that: Any): Boolean

final def ##(): Int = sys.error("##")
def hashCode(): Int

def toString(): String

final def getClass(): Class[_] = sys.error("getClass")
final def isInstanceOf[T0]: Boolean = sys.error("isInstanceOf")
final def asInstanceOf[T0]: T0 = sys.error("asInstanceOf")

scala程序中每个对象都可以用 == 、!= 或 eqauls 来进行比较,用 ## 或 hashCode 做哈希,以及用toString 做格式化,==方法本质上讲等同于equals,而 != 一定是 equals 的反义

object EqualsTest {
  def main(args: Array[String]): Unit = {
    val c1 = C(1000);
    val c2 = C(1000);
    println(c1.equals(c2))
  }
}

class C(val id: Int) {
  //== 默认继承了 Object equals,方法重写equals方法比较值相等,  
  override def equals(obj: Any): Boolean = obj.isInstanceOf[C] && obj.asInstanceOf[C].id == id;
}

object C {
  def apply(id: Int): C = new C(id)
}
  • 在 java 中,new Integer(1) 并不 equals new Long(1),由于 scala 跟 java 相比是更规则的语言,我们在实现时有必要将这些类的 == 做特殊处理,来解决这个差异。同理,## 方法提供了scala版本的哈希算法,跟 java 的hascode
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值