首页 > 代码库 > Scala继承

Scala继承

类型检查和转换

要测试某个对象是否属于某个给定的类,可以使用isInstanceOf方法,如果测试成功,你可以用asInstanceOf方法将引用转换为子类的引用
if(p.isInstanceOf[Employee]){
  val s = p.asInstanceOf[Employee]
}
如果想测试p指向的是一个Employee对象但又不是其子类,可以用
if(p.getClass==classOf[Employee]),classOf方法定义在scala.Predef对象中,因此会被自动引入。
Scala
Java
obj.isInstanceOf[C]
obj instanceof C
obj.asInstanceOf[C]
(C)obj
classOf[C]
C.class

超类的构造

    类有一个主构造器和任意数量的辅助构造器,而每个辅助构造器都必须以对先前定义的辅助构造器或主构造器的调用开始。子类的辅助构造器最终都会调用主构造器,只有主构造器可以调用超类的构造器。辅助构造器永远都不可能直接调用超类的构造器。在Scala的构造器中,你不能调用super(params),不像Java,可以用这种方式调用超类构造器。
    Scala类可以扩展Java类,这种情况下,它的主构造器必须调用Java超类的某一个构造方法。
class Square(x: Int, y: Int, width: Int) extends java.awt.Rectangle(x, y, width, width) {
}

重写字段

有如下限制:
  • def只能重写另一个def
  • val只能重写另一个val或不带参数的def
  • var只能重写另一个抽象的var

Scala类型

所有的Scala类都实现ScalaObject这个标记接口,这个接口没有定义任何方法。在继承层级的另一端是Nothing和Null类型。Null类型的唯一实例是null值,你可以将null赋值给任何引用,但不能赋值给值类型的变量,比如,不能将Int设为null,Nothing类型没有实例,对于泛型结构时常有用。
Nothing类型和Java或C++中的void完全是两个概念,在Scala中,void由Unit类型表示,该类型只有一个值,那就是()。