Scala建構函式


在scala中,建構函式不是特殊的方法。Scala提供主要和任意數量的輔助建構函式。我們將在下面的例子中逐一個詳細解釋。

Scala預設主建構函式

在scala中,如果不指定主建構函式,編譯器將建立一個主建構函式的建構函式。 所有類的主體的宣告都被視為建構函式的一部分。它也被稱為預設建構函式。

Scala預設主建構函式範例

class Student{  
    println("Hello from default constructor");  
}

Scala主要建構函式

Scala提供了一個類的主建構函式的概念。如果程式碼只有一個建構函式,則可以不需要定義明確的建構函式。它有助於優化程式碼,可以建立具有零個或多個引數的主建構函式。

Scala主建構函式範例

class Student(id:Int, name:String){  
    def showDetails(){  
        println(id+" "+name);  
    }  
}  

object Demo{  
    def main(args:Array[String]){  
        var s = new Student(1010,"Maxsu");  
        s.showDetails()  
    }  
}

將上面程式碼儲存到原始檔:Demo.scala中,使用以下命令編譯並執行程式碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
1010 Maxsu

Scala次要(輔助)構造器

可以在類中建立任意數量的輔助建構函式,必須要從輔助建構函式內部呼叫主建構函式。this關鍵字用於從其他建構函式呼叫建構函式。當呼叫其他建構函式時,要將其放在建構函式中的第一行。

Scala二次建構函式範例

class Student(id:Int, name:String){  
    var age:Int = 0  
    def showDetails(){  
        println(id+" "+name+" "+age)  
    }  
    def this(id:Int, name:String,age:Int){  
        this(id,name)       // Calling primary constructor, and it is first line  
        this.age = age  
    }  
}  

object Demo{  
    def main(args:Array[String]){  
        var s = new Student(1010,"Maxsu", 25);  
        s.showDetails()  
    }  
}

將上面程式碼儲存到原始檔:Demo.scala中,使用以下命令編譯並執行程式碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
1010 Maxsu 25

Scala範例:構造器過載

在scala中,可以過載建構函式。下面我們來看一個例子。

class Student(id:Int){  
    def this(id:Int, name:String)={  
        this(id)  
        println(id+" "+name)  
    }  
    println(id)  
}  

object Demo{  
    def main(args:Array[String]){  
        new Student(101)  
        new Student(100,"Minsu")  
    }  
}

將上面程式碼儲存到原始檔:Demo.scala中,使用以下命令編譯並執行程式碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
101
100
100 Minsu