主构造函数
本课属于 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挑战
简单声明类 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())
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器