📜  斯卡拉 |主构造函数(1)

📅  最后修改于: 2023-12-03 15:10:24.424000             🧑  作者: Mango

Scala | 主构造函数

Scala是一种高级编程语言,它混合了面向对象编程和函数式编程的最佳实践。 当我们创建一个Scala类时,主构造函数控制这个类的创建方式。

基本语法

在Scala中,创建类的语法是:

class ClassName constructor(arguments) {
  // class body
}

构造函数是class头部的“(arguments)”部分,它定义了类实例化时要使用的参数。 有两种类型的构造函数:主构造函数和附属构造函数。

主构造函数可以使用以下两种方式声明:

// 方式1:类头部声明
class MyClass(val arg1: String, var arg2: Int) {
  // class body
}

// 方式2:直接在类头部使用小括号声明主构造函数
class MyClass(val arg1: String, var arg2: Int)(val arg3: Boolean) {
  // class body
}
主构造函数参数

主构造函数参数可以是val,var或没有修饰符:

  • val:参数是只读,只能在构造函数中初始化,不能在类内部更改它们的值。
  • var:参数可读可写,可以在构造函数和类内部更改它们的值。
  • 没有修饰符:参数在类中不可用,仅在主构造函数中使用。

以下是一个使用val和var的示例:

class Person(val name: String, var age: Int) {
  println("Person object was created")

  override def toString: String = s"$name ($age)"
}

val john = new Person("john", 30)
println(john.name) // john
john.age = 31
println(john) // john (31)

该代码打印以下内容:

Person object was created
john
john (31)
构造函数的重载

除了主构造函数外,Scala还支持附属构造函数的概念。 附加构造函数是在类中声明的额外构造函数。它们使用不同的参数组来实例化类,但它们必须调用主构造函数或另一个附属构造函数。

以下是一个使用附属构造函数的示例:

class Person(val name: String, var age: Int) {
  def this(name: String) {
    this(name, 0)
  }

  override def toString: String = s"$name ($age)"
}

val john = new Person("john", 30)
val jane = new Person("jane")
println(john) // john (30)
println(jane) // jane (0)

该代码输出以下内容:

john (30)
jane (0)
结论

Scala的主构造函数允许您定义类的实例化方式。 它还允许您通过使用val,var或不带修饰符的参数来控制类的可变性。 附加构造函数允许您使用不同的参数来实例化相同的类。