Scala 初级构造器
构造函数用于初始化对象的状态。和方法一样,构造器也包含了一系列的语句(即指令)。语句在对象创建时被执行。当我们的Scala程序只包含一个构造函数时,该构造函数被 称为主构造函数。
主构造函数和类共享同一个主体,这意味着我们不需要明确创建一个构造函数。
语法
class class_name(Parameter_list) {
// Statements...
}
关于Scala中的主构造函数的一些重要观点 –
- 主构造函数可以有零个或多个参数。
- 参数列表中的参数在构造函数中使用 var 来声明,那么其值可能会改变。Scala还为该字段生成了getter和setter方法。
- 参数表的参数在构造函数中使用 val 来声明,那么其值就不能改变。
- 在构造函数中不使用 val 或 var 来声明参数列表的参数,那么字段的可见性就非常紧凑,Scala不会为该字段生成任何getter和setter方法。
- 如果在构造函数中使用 私有的val 或 var 来声明参数列表的参数,那么它就不会为该字段产生任何getter和setter方法。因此,这些字段可以被该类的成员访问。
- 在Scala中,只有主构造函数才允许调用超类构造函数。
让我们通过一些例子来更好地理解它。
例子1: 一个带有参数列表的主构造函数
// 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();
}
}
输出
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 (这行代码)甚至不会被编译,因为主构造函数是private的。
极客教程