快学Scala 第十一课 (类继承)

Posted AK47Sonic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快学Scala 第十一课 (类继承)相关的知识,希望对你有一定的参考价值。

类继承:

class People {
  
}

class Emp extends People{
  
}

和Java一样,final的类不能被继承。final的字段和方法不能被override。

在Scala中重写一个非抽象方法必须使用override, 继承抽象方法前面加了override也没关系。

abstract class Person {
  def say(s: String): Unit
}

class Worker extends Person{
  override def say(s: String) = {
    println(s + "abc")
  }
 
}

调用超类的方法,关键字用super

class WorkerSub extends Worker{
  def say2(): Unit = {
    super.say("call father‘s say")
  }
}

isInstanceOf 判断对象类型,但不能区分父类型。

asInstanceOf 转换为子类的类型

用getClass和classOf精确判断类型

object TestCase {
    def main(args: Array[String]): Unit = {
      
     val w = new WorkerSub()
     println(w.isInstanceOf[Worker])
     println(w.isInstanceOf[Person])
     println(w.isInstanceOf[WorkerSub])
     
     w.asInstanceOf[Worker].say("hello")
     
     println(classOf[Worker])
     println(w.getClass == classOf[Worker])
     println(w.getClass == classOf[Person])
     println(w.getClass == classOf[WorkerSub])
      
  }
  
}

运行结果:

true
true
true
helloabc
class Worker
false
false
true

重写字段:

  1. def只能重写另一个def
  2. val只能重写另一个val或不带参数的def
  3. var只能重写另一个抽象的var,否则重写报错。

 

以上是关于快学Scala 第十一课 (类继承)的主要内容,如果未能解决你的问题,请参考以下文章

快学Scala 第十八课 (trait多继承)

快学Scala习题解答—第十一章 操作符

快学Scala 第一课 (变量,类型,操作符)

快学Scala 第十课 (包和包对象)

《快学Scala》第八章——继承

快学Scala 第十九课 (trait的abstract override使用)