scala 輔助構造器 主構造器

 

      和java或c++同樣,scala也能夠有任意多的構造器。不過,scala類有一個構造器比其它全部構造器都更爲重要,它就是主構造器。除了主構造器以外,類還能夠有任意多的輔助構造器。java

 

有兩點須要注意:c++

  1. 輔助構造器的名稱爲this。(在java或c++中,構造器的名稱和類名相同--當你修改類名時就不那麼方便了。)ide

  2. 每個輔助構造器都必須以一個對先前已定義的其它輔助構造器或主構造器的調用開始。this

 

一個類若是沒有顯式定義主構造器則自動擁有一個無參的主構造器。spa

class Person_1 {

  private var name = ""

  private var age = 0

  def this(name: String) { //一個輔助構造器

    this() //調用主構造器

    this.name = name

  }

  def this(name: String, age: Int) {//另外一個輔助構造器

    this(name)//調用前一個輔助構造器

    this.age = age

  }

}

 

演示scala

object Person_1 {
  def main(args: Array[String]) {
    val p1 = new Person_1 //主構造器
    val p2 = new Person_1("Fred") //第一個輔助構造器
    val p3 = new Person_1("Fred", 42) //第二個輔助構造器
  }
}

                                主構造器對象

 

主構造器的參數直接放置在類名以後。ip

 
class Person_3(val name: String, val age: Int) {
  //中的內容就是主構造器的參數
}

至關於java中ci

public class Person_3{
private String name;
private int age;
public Person_3(String name, int age){
this.name=name;
this.age=age;
}
public String name(){ return this.name;}
public int age(){ return this.age;}
}

主構造器會執行類定義中的全部語句。it

class Person_3(val name: String, val age: Int) {
  //中的內容就是主構造器的參數
  println("just constructed another person")
  def description = name + " is " + age + " years old"
}

println語句是主構造器的一部分。每當有對象被構造出來時,上述代碼就會執行。當你須要在構造過程中配置某個字段時這個特性特別有用。

import scala.util.Properties
import java.util.Properties
import java.io.FileReader
class MyProg {
  private val props = new Properties
  props.load(new FileReader("myprog.properties"))
  //上述語句是主構造器的一部分
}

若是類名以後沒有參數,則該類具有一個無參主構造器。這樣一個構造器僅僅是簡單地執行類體中的全部語句而已。

 

你一般能夠經過在主構造器中使用默認參數來避免過多地使用輔助構造器。

 

 

class Person_4(val name: String = "", val age: Int = 0) {
}

 

還能夠這樣

class Person_4(val name: String, private var age: Int ) {
}

這段代碼將聲明並初始化以下字段。

val name: String
private var age: Int
相關文章
相關標籤/搜索