📜  Kotlin 构造函数(1)

📅  最后修改于: 2023-12-03 14:43:42.048000             🧑  作者: Mango

Kotlin 构造函数

Kotlin 是一种面向对象的编程语言,具有许多先进的特性。其中之一是构造函数。在本文中,我们将深入探讨 Kotlin 构造函数及其用法。

构造函数是什么?

构造函数是类中的一个特殊方法,用于创建新对象时初始化其属性。在 Kotlin 中,一个类可以有一个主构造函数和多个辅助构造函数。

主构造函数

主构造函数是类头的一部分,并且位于类名后面。它可以包含参数和可见性修饰符:

class MyClass constructor(name: String) {
    // 类的属性
}

如果主构造函数没有可见性修饰符或注释,则关键字 constructor 可省略。

class MyClass(name: String) {
    // 类的属性
}

我们可以通过在主构造函数的参数上添加 val 或 var 来将其定义为属性:

class MyClass(val name: String, var age: Int) {
    // ...
}

在上面的示例中,name 是只读属性(val),age 是可写属性(var)。

辅助构造函数

Kotlin 中的辅助构造函数是通过 constructor 关键字加上函数名和参数列表来定义的:

class MyClass {
    constructor(name: String) {
        // ...
    }
    constructor(name: String, age: Int) {
        // ...
    }
}

辅助构造函数必须调用类中的其他构造函数,可以是主构造函数或其他辅助构造函数:

class MyClass(val name: String, var age: Int) {
    constructor(name: String) : this(name, 0) {
        // ...
    }
}

class MyClass {
    var name: String = ""
    var age: Int = 0

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, age: Int) : this(name) {
        this.age = age
    }
}

在上面的示例中,第一个 MyClass 类的辅助构造函数调用了主构造函数,第二个 MyClass 类的辅助构造函数调用了其他辅助构造函数。

初始化块

初始化块是构造函数中执行的一个代码块。在 Kotlin 中,我们可以使用 init 关键字定义一个初始化块:

class MyClass(val name: String, var age: Int) {
    init {
        println("初始化块执行")
    }
    // ...
}

初始化块在主构造函数之后执行,辅助构造函数在调用其他构造函数之后执行。

继承和构造函数

在 Kotlin 中,一个子类必须在其主构造函数中初始化其父类。如果父类没有无参构造函数,则必须在子类主构造函数中调用父类的构造函数:

open class Person(val name: String, var age: Int) {
}

class Student(name: String, age: Int, val grade: Int) : Person(name, age) {
}

在上面的示例中,Student 类必须在其主构造函数中调用 Person 类的构造函数。

总结

构造函数是在创建新对象时初始化其属性的特殊方法。Kotlin 中的一个类可以有一个主构造函数和多个辅助构造函数。辅助构造函数必须调用类中的其他构造函数。初始化块是构造函数中执行的一个代码块。在 Kotlin 中,一个子类必须在其主构造函数中初始化其父类。