Menu
CoddyTech

主构造函数

本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 3 课,共 57 课。

大多数 Kotlin 类会在主构造函数中接收初始值,主构造函数写在类名后面的括号中。参数前面的 val 或 var 也会同时让它成为属性:

class Book(val title: String, var pages: Int)

在 main 中:

val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)

输出:

Dune
420

不带 val 或 var 的参数只在创建实例时可用,例如用来计算属性。创建后,val 属性不能重新赋值,var 属性则可以:

class Temperature(celsius: Double) {
    val fahrenheit = celsius * 9 / 5 + 32
}

在 main 中:

val t = Temperature(100.0)
println(t.fahrenheit)

输出:

212.0

构造函数参数可以有默认值,也可以按名称传递,因此一个构造函数就能涵盖多种创建实例的方式:

class Timer(val seconds: Int, val label: String = "timer")

在 main 中:

val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")

输出:

egg 300
timer 30
tea 180

在类体内部,this 指的是当前实例。当方法参数与属性同名时,需要使用它:

class Player(var name: String) {
    fun rename(name: String) {
        this.name = name
    }
}

在 main 内部:

val p = Player("anon")
p.rename("Ada")
println(p.name)

输出:

Ada
challenge icon

挑战

简单

声明类 Account,并使用主构造函数:包含只读的 owner 和可修改的 balance,其默认值为 0。添加 summary(),使其返回 Ada has 150。

提供的代码会读取所有者,并在存在第二行时读取初始余额。它会创建带余额或不带余额的账户,并打印 summary()。

你的代码写在 Account.kt 中。Main.kt 包含提供的输入/输出代码,不能编辑。

亲手试试

fun main() {
    // 提供的输入输出代码:保持原样。
    val input = generateSequence(::readLine).toList()
    val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
    println(account.summary())
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Kotlin 在线编辑器