10.Scala类的层次结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15014327/article/details/83689140

类的层次结构

// Any类的源码,Any类有5个方法
// ==与!=被声明为final,它们不能被子类重写
final def ==(that: Any): Boolean
final def !=(that: Any): Boolean
def equals(that: Any): Boolean
def hashCode: Int
def toString: String

根据以上层次结构和Any源码,我们做出如下说明:

  1. ==与!=对于值类型和引用类型都是比较内容,==与!=分别由equals与!equals实现,如果想比较引用类型地址则使用eq或ne
  2. Any是所有类的父类,它有两个子类AnyRef与AnyVal。AnyVal包括值类型对应Java的基本类型,AnyRef包括引用类型对应Java的Object。
  3. AnyVal是Any的子类,因此它的子类也可以调用Any继承的方法,如:2.hashCode()。这不同与Java。
  4. Unit是scala中AnyVal的子类,()可以作为Unit的实例,同样可以调用Any继承的方法。如:().hashCode()。
  5. Null类型是所有AnyRef类型的子类,也就是说它是所有引用类型的子类。
  6. Nothing类型是所有scala类的子类,常用与程序返回非正常结果。

  演示说明:

//== 与 equals 与 eq
val x = new String("111")
val y = new String("111")
println(x == y)
println(x eq y)
println(x.equals(y))
    
//null是引用类型的子类,不是值类型的子类
//var z:Int = null #报错#
    
//Nothing类型的使用
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!")
}

参考自:https://blog.csdn.net/column/details/scalalearning.html

猜你喜欢

转载自blog.csdn.net/qq_15014327/article/details/83689140
今日推荐