2020-12-16

T D Z發表於2020-12-16

主構造器

package cn.doit.com.day03.demo2

//跟在類名的後面,跟類交織在一起,叫主造器  主構造會執行類定義中的所有語句
// 用val和var修飾的構造器引數,會成為這個類的成員變數 預設val修飾 會成為類的成員變數
class Student(val name:String , var age:Int) {
  val i = 100

  //程式碼塊
  {
    try {
      println("hi ketty")
    } catch {
      case e: Exception =>   //可以進行try catch
    } finally {}
  }

  def m():Unit={
    println("hello world")
  }

  var j:Int = _  //給指定的型別的變數賦予預設值

  Student.sayHi()
}

object Student {
  private def sayHi(): Unit ={
    println("hi tom")
  }

  def main(args: Array[String]): Unit = {

    val s = new Student
    println(s)
  }
}

 

輔助構造器

package cn.doit.com.day03.demo3
//在主構造器中傳遞的引數可以用val var修飾
class Boy(val name: String , val age: Int) {

  var sal: Double = _  //對應型別變數的的預設初始值
  var gender:String = _

  /*
      定義輔助構造器,輔助構造器一定要用def this,輔助構造器一定要呼叫
      主構造器或其他的輔助構造器
      輔助構造器的方法中的引數不用加var val修飾
      構造器方法一定是this
                     */
  def this(name:String, age:Int, sal:Double){
    this(name ,age)
    this.sal = sal
  }

  def this(name:String ,age:Int ,sal:Double ,gender:String){
    //呼叫了輔助構造器 相當於間接呼叫了主構造
    this(name,age,sal)
    this.gender = gender
  }
}

//不用 var val修飾只是形參
class Boy2(name: String , age: Int){

}

//name weight子類可以繼承 private private[this]繼承不了 height只是個形參
class Boy3(val name:String , private var age:Int , private[this] val weight:Double , height:Double = 165.0){

}

object Boy {
  def main(args: Array[String]): Unit = {

    val b = new Boy("tom", 18, 12000.0)
    println(b.sal)
  }
}