斯卡拉 |主构造函数
构造函数用于初始化对象的状态。与方法一样,构造函数也包含一组语句(即指令)。语句在对象创建时执行。当我们的 Scala 程序仅包含一个构造函数而不是该构造函数时,称为主构造函数。
主构造函数和类共享同一个主体,这意味着我们不需要显式创建构造函数。
句法:
class class_name(Parameter_list) {
// Statements...
}
关于 Scala 中的主构造函数的一些要点——
- 主构造函数可以有零个或多个参数。
- parameter-list 的参数在构造函数中使用var声明,然后值可以更改。 Scala 还为该字段生成 getter 和 setter 方法。
- parameter-list 的参数在构造函数中使用val声明,然后值不能更改并且 Scala 也只为该字段生成一个 getter 方法。
- parameter-list 的参数是在构造函数中不使用val或var声明的,因此该字段的可见性非常紧凑,Scala 不会为该字段生成任何 getter 和 setter 方法。
- parameter-list 的参数在构造函数中使用private val或var声明,然后它会阻止为该字段生成任何 getter 和 setter 方法。因此,该类的成员可以访问这些字段。
- 在 Scala 中,只允许主构造函数调用超类构造函数。
让我们通过一些例子更好地理解它。
示例 #1:带有参数列表的主构造函数
Scala
// Scala program to illustrate the
// concept of primary constructor
// Creating a primary constructor
// with parameter-list
class GFG(Lname: String, Tname: String, article: Int)
{
def show()
{
println("Language name: " + Lname);
println("Topic name: " + Tname);
println("Total published articles:" + article);
}
}
// Creating object
object Main
{
// Main method
def main(args: Array[String])
{
// Creating and initializing
// object of GFG class
var obj = new GFG("Scala", "Constructors", 14);
obj.show();
}
}
Scala
// Scala program to illustrate the
// concept of default primary constructor
class GFG
{
def show()
{
println("Welcome to Geeksforgeeks");
}
}
// Creating object
object Main
{
// Main method
def main(args: Array[String])
{
// Creating object of GFG class
var obj = new GFG();
obj.show();
}
}
Scala
// Scala program to illustrate the
// concept of primary constructor
// Creating primary constructor with default values
class GFG(val Lname: String = "Scala",
val Tname: String = "Constructors")
{
def show()
{
println("Language name: " + Lname);
println("Topic name: " + Tname);
}
}
// Creating object
object Main
{
// Main method
def main(args: Array[String])
{
// Creating object of GFG class
var obj = new GFG();
obj.show();
}
}
Scala
// Scala program to illustrate the
// concept of primary constructor
// by using private keyword
class GFG private
{
// Define method
override def toString = "Welcome to GeeksForGeeks."
}
// Creating object of class GFG
object GFG
{
// Creating object
val gfg = new GFG
def getObject = gfg
}
object SingletonTest extends App
{
// this won't compile
// val gfg = new GFG
// this works
val gfg = GFG.getObject
println(gfg)
}
输出:
Language name: Scala
Topic name: Constructors
Total published articles:14
在上面的示例中,Lname、Tname和article是主构造函数的参数,而 display 是打印值的函数。示例 #2:带有参数列表的主构造函数。
斯卡拉
// Scala program to illustrate the
// concept of default primary constructor
class GFG
{
def show()
{
println("Welcome to Geeksforgeeks");
}
}
// Creating object
object Main
{
// Main method
def main(args: Array[String])
{
// Creating object of GFG class
var obj = new GFG();
obj.show();
}
}
输出:
Welcome to Geeksforgeeks
在上面的例子中,我们可以看到当我们创建类的对象时编译器会自动创建一个主构造函数,这个构造函数被称为默认主构造函数。示例 #3:具有默认值的主构造函数
斯卡拉
// Scala program to illustrate the
// concept of primary constructor
// Creating primary constructor with default values
class GFG(val Lname: String = "Scala",
val Tname: String = "Constructors")
{
def show()
{
println("Language name: " + Lname);
println("Topic name: " + Tname);
}
}
// Creating object
object Main
{
// Main method
def main(args: Array[String])
{
// Creating object of GFG class
var obj = new GFG();
obj.show();
}
}
输出:
Language name: Scala
Topic name: Constructors
示例 #4:使用 private 关键字私有的主构造函数。
斯卡拉
// Scala program to illustrate the
// concept of primary constructor
// by using private keyword
class GFG private
{
// Define method
override def toString = "Welcome to GeeksForGeeks."
}
// Creating object of class GFG
object GFG
{
// Creating object
val gfg = new GFG
def getObject = gfg
}
object SingletonTest extends App
{
// this won't compile
// val gfg = new GFG
// this works
val gfg = GFG.getObject
println(gfg)
}
输出:
Welcome to GeeksForGeeks.
正如我们在上面的示例中看到的, private关键字用于类名和构造函数参数列表之间。 val gfg = new GFG (这行代码)甚至不会编译,因为主构造函数是私有的。