Kotlin 类和对象基础
Kotlin 是面向对象的语言,类和对象是其核心概念。类的定义使用 class 关键字,对象通过实例化类创建。
class Person {
var name: String = "Unknown"
var age: Int = 0
}
fun main() {
val person = Person()
person.name = "Alice"
person.age = 25
println("${person.name} is ${person.age} years old")
}
主构造函数与初始化
Kotlin 支持主构造函数和次构造函数。主构造函数直接在类名后声明,初始化逻辑可写在 init 块中。
class Car(val brand: String, var model: String) {
init {
println("Initializing a $brand $model")
}
}
fun main() {
val car = Car("Tesla", "Model S")
println(car.model) // 输出: Model S
}
次构造函数
次构造函数通过 constructor 关键字定义,需委托给主构造函数或其他次构造函数。
class Book(val title: String, val author: String) {
var price: Double = 0.0
constructor(title: String, author: String, price: Double) : this(title, author) {
this.price = price
}
}
fun main() {
val book = Book("Kotlin Guide", "Jane Doe", 29.99)
println("${book.title} by ${book.author}, price: $${book.price}")
}
继承与覆盖
Kotlin 默认类为 final,需标记为 open 才能被继承。方法覆盖使用 override 关键字。
open class Animal(val name: String) {
open fun makeSound() {
println("Some generic sound")
}
}
class Dog(name: String) : Animal(name) {
override fun makeSound() {
println("$name barks")
}
}
fun main() {
val dog = Dog("Buddy")
dog.makeSound() // 输出: Buddy barks
}
数据类
数据类自动生成 equals()、hashCode() 和 toString() 等方法,适用于存储数据。
data class User(val id: Int, val username: String, val email: String)
fun main() {
val user = User(1, "alice", "alice@example.com")
println(user) // 输出: User(id=1, username=alice, email=alice@example.com)
}
伴生对象与静态成员
Kotlin 使用 companion object 实现类似静态成员的功能。
class Logger {
companion object {
fun log(message: String) {
println("[LOG] $message")
}
}
}
fun main() {
Logger.log("Application started") // 输出: [LOG] Application started
}
对象表达式与单例
对象表达式用于匿名对象,单例通过 object 关键字实现。
object Database {
val connection = "Connected"
fun query(sql: String) = "Result for: $sql"
}
fun main() {
println(Database.connection) // 输出: Connected
println(Database.query("SELECT * FROM users"))
}
密封类
密封类限制子类范围,常用于状态管理。
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Success: ${result.data}")
is Result.Error -> println("Error: ${result.message}")
}
}
fun main() {
handleResult(Result.Success("Data loaded"))
}



