Kotlin 简明教程

Kotlin - Constructors

Kotlin 构造函数是类中的特殊成员函数,会在实例化对象时调用。每当创建对象时,都会自动调用已定义的构造函数,用于初始化类的属性。

一个 Kotlin 类可能有以下两种类型的构造函数:

  1. Primary Constructor

  2. Second Constructors

Kotlin 类可以有一个主构造函数和一个或多个附加的辅助构造函数。Kotlin 主构造函数对类进行初始化,而辅助构造函数有助于在初始化类时包含一些额外的逻辑。

Kotlin Primary Constructor

可以像以下示例所示那样在类头级别声明主构造函数。

class Person constructor(val firstName: String, val age: Int) {
   // class body
}

如果未指定任何注解或访问修饰符(如 public、private 或 protected),则可以省略 constructor 关键字。

class Person (val firstName: String, val age: Int) {
   // class body
}

在此示例中,我们已通过 val 关键字声明属性以使其为只读。如果你需要在稍后的时间点更改属性值,可以使用关键字 var 来定义这些属性。

Initializer Block

主构造函数不能包含任何代码。可以通过 init 关键字加前缀的初始化器块来放置初始化代码。可能有多个 init 块,在实例初始化期间,初始化器块将按其在类主体中出现的顺序执行,与属性初始化器交错:

以下是带有初始化器块用法示例:

class Person (val _name: String, val _age: Int) {
   // Member Variables
   var name: String
   var age: Int

   // Initializer Block
   init {
      this.name = _name
      this.age = _age
      println("Name = $name")
      println("Age = $age")
   }
}

fun main(args: Array<String>) {
   val person = Person("Zara", 20)
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Name = Zara
Age = 20

Default Values

Kotlin 允许使用某些默认值初始化构造函数参数。以下是它的一个工作示例:

class Person (val _name: String, val _age: Int=20) {
   // Member Variables
   var name: String
   var age: Int

   // Initializer Block
   init {
      this.name = _name
      this.age = _age
      println("Name = $name")
      println("Age = $age")
   }
}

fun main(args: Array<String>) {
   val zara = Person("Zara")
   val nuha = Person("Nuha", 11)
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Name = Zara
Age = 20
Name = Nuha
Age = 11

Kotlin Secondary Constructor

如前所述,Kotlin 允许为你的类创建一或多个辅助构造函数。利用 constructor 关键字创建该辅助构造函数。每当你在 Kotlin 中想要创建多个构造函数或每当你想要在主构造函数中包含更多逻辑且你无法执行此操作时,就需要它,因为主构造函数可能会被其他类调用。

Example

请看以下示例,在这里我们创建了一个辅助构造函数来再次实现上述示例:

class Person{
   // Member Variables
   var name: String
   var age: Int

   // Initializer Block
   init {
      println("Initializer Block")
   }

   // Secondary Constructor
   constructor ( _name: String, _age: Int) {
      this.name = _name
      this.age = _age
      println("Name = $name")
      println("Age = $age")
   }
}

fun main(args: Array<String>) {
   val zara = Person("Zara", 20)
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Initializer Block
Name = Zara
Age = 20

辅助构造器不允许与辅助构造器参数配合使用 valvar 。现在让我们看一个带有两个辅助构造器的例子:

class Person{
   // Member Variables
   var name: String
   var age: Int
   var salary:Double

   // First Secondary Constructor
   constructor ( _name: String, _age: Int) {
      this.name = _name
      this.age = _age
      this.salary = 0.00
      println("Name = $name")
      println("Age = $age")
   }

   // Second Secondary Constructor
   constructor ( _name: String, _age: Int, _salary: Double) {
      this.name = _name
      this.age = _age
      this.salary = _salary
      println("Name = $name")
      println("Age = $age")
      println("Salary = $salary")
   }
}

fun main(args: Array<String>) {
   val nuha = Person("Nuha", 12)
   val zara = Person("Zara", 20, 2000.00)
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Name = Nuha
Age = 12
Name = Zara
Age = 20
Salary = 2000.0