第二部分:面向对象编程与 Kotlin 特性
第 5 章:类与对象
5.1 类的定义与实例化
1. 类的基本定义
在 Kotlin 中,使用 class 关键字定义类。类的声明包含类名、类头(主构造函数、父类等)和类体(属性和方法)。如果类体为空,可以省略花括号 {}。
// 最简单的类定义
class Person
// 带属性和方法的类
class Person {
var name: String = ""
fun sayHello() {
println("Hello, $name!")
}
}
2. 构造函数
Kotlin 的类可以有一个主构造函数和多个次构造函数:
- 主构造函数:直接声明在类名后,使用
constructor关键字(如果无注解或可见性修饰符可省略)。 - 次构造函数:通过
constructor在类体内定义。
// 主构造函数
class Person(val name: String, var age: Int) {
init {
println("Person initialized with name: $name")
}
}
// 次构造函数
class Person {
var name: String = ""
var age: Int = 0
constructor(name: String) {
this.name = name
}
constructor(name: String, age: Int) : this(name) {
this.age = age
}
}
3. 实例化对象
Kotlin 中实例化对象不需要 new 关键字,直接调用构造函数即可:
val person1 = Person("Alice", 25) // 主构造函数
val person2 = Person("Bob") // 次构造函数
4. 初始化块
init 代码块用于在主构造函数执行时初始化逻辑,多个 init 块按顺序执行:
class Person(val name: String) {
init {
println("First init block: $name")
}
init {
println("Second init block")
}
}
5. 属性与默认值
Kotlin 支持在声明属性时直接赋默认值:
class Person(
val name: String = "Unknown",
var age: Int = 0
)
6. 可见性修饰符
public(默认):全局可见。private:仅类内部可见。protected:类内部及子类可见。internal:同一模块内可见。
class Example {
private val secret = "Hidden"
protected open val message = "Hello"
internal val version = "1.0"
}
7. 示例:完整类定义
class Car(
val brand: String,
var model: String,
private var year: Int = 2020
) {
init {
println("Car $brand $model initialized")
}
fun getYear(): Int = year
fun updateModel(newModel: String) {
model = newModel
}
}
// 使用
val myCar = Car("Tesla", "Model 3")
myCar.updateModel("Model Y")
println(myCar.getYear())
关键点总结
- Kotlin 的类定义比 Java 更简洁。
- 主构造函数和属性声明可以合并。
- 实例化无需
new关键字。 init块用于灵活的初始化逻辑。
