1. 程式人生 > >12.Scala中的繼承:超類的構造、重寫欄位、重寫方法程式碼實戰

12.Scala中的繼承:超類的構造、重寫欄位、重寫方法程式碼實戰

object ExtendOverride_12 {
  def main(args: Array[String]): Unit = {
     val w = new Worker("Spark", 5, 100000)
     println("school: " + w.school)
     println("salary: " + w.salary)
     println(w.toString)
     
  }
}

class Person1(val name : String, val age : Int){   //name和age是其欄位
  println("The primary constructor of Person")
  val school = "BJU"
  def sleep = "8 hours"
  override def toString = "I am a Person!"    //所有物件都有toString(),類似Java類extends Object
}

class Worker(name : String, age : Int, val salary : Long) extends Person1(name , age){   //子類相比父類多了salary欄位
  //這裡是重點。子類傳入的引數name、age也會傳入父類主構造器中,把父類主構造器所有引數都填充滿。而Java中,用super()呼叫父類構造器

 println("This is the subclass of Person, Primary constructor of Worker")
  override val school = "Spark"     //重寫欄位
  override def toString = "I am a Worker!! " + super.sleep   //重寫toString()方法 這裡"super."可以去掉
}

輸出:

The primary constructor of Person
This is the subclass of Person, Primary constructor of Worker
school: Spark
salary: 100000
I am a Worker!! 8 hours

參考資料來源於 DT大資料夢工廠 Scala零基礎實戰經典第12課 由王家林老師講解