跳转到内容

Kotlin类基础

来自代码酷

Kotlin类基础[编辑 | 编辑源代码]

Kotlin类基础是面向对象编程(OOP)的核心概念之一。类是对象的蓝图,定义了对象的属性和行为。Kotlin的类系统简洁而强大,支持现代OOP特性,同时减少了样板代码。

类的定义[编辑 | 编辑源代码]

在Kotlin中,使用class关键字定义类。最简单的类可以没有任何成员:

class EmptyClass

类成员[编辑 | 编辑源代码]

类可以包含:

  • 构造函数(主构造和次构造)
  • 属性(字段)
  • 方法(函数)
  • 初始化块
  • 嵌套类
class Person(
    val name: String, // 属性 - 只读(val)
    var age: Int     // 属性 - 可读写(var)
) {
    // 方法
    fun greet() {
        println("Hello, I'm $name and I'm $age years old.")
    }
}

构造函数[编辑 | 编辑源代码]

Kotlin类可以有:

  • 主构造函数:类头部分声明
  • 次构造函数:类体内用constructor声明

主构造函数[编辑 | 编辑源代码]

主构造函数简洁的语法:

class User(val id: Int, val name: String)

等价于:

class User constructor(_id: Int, _name: String) {
    val id: Int = _id
    val name: String = _name
}

次构造函数[编辑 | 编辑源代码]

次构造函数必须委托给主构造函数(直接或间接):

class Person(val name: String) {
    var age: Int = 0
    
    // 次构造函数
    constructor(name: String, age: Int) : this(name) {
        this.age = age
    }
}

属性[编辑 | 编辑源代码]

Kotlin属性自动生成getter/setter:

class Rectangle(
    val width: Int,  // 只读属性(只有getter)
    var height: Int  // 可读写属性(有getter和setter)
) {
    val area: Int    // 自定义getter
        get() = width * height
}

初始化顺序[编辑 | 编辑源代码]

类实例化时的初始化顺序: 1. 主构造函数参数 2. 类体内属性初始化器和初始化块 3. 次构造函数体

sequenceDiagram participant MainConstructor participant Properties participant InitBlocks participant SecondaryConstructor MainConstructor->>Properties: 1. 主构造参数 Properties->>InitBlocks: 2. 属性和初始化块 InitBlocks->>SecondaryConstructor: 3. 次构造体

实际案例:银行账户[编辑 | 编辑源代码]

class BankAccount(
    val accountNumber: String,
    initialBalance: Double
) {
    var balance = initialBalance
        private set  // setter设为私有
    
    fun deposit(amount: Double) {
        require(amount > 0) { "存款金额必须为正数" }
        balance += amount
    }
    
    fun withdraw(amount: Double): Boolean {
        require(amount > 0) { "取款金额必须为正数" }
        return if (amount <= balance) {
            balance -= amount
            true
        } else {
            false
        }
    }
    
    override fun toString() = "账户 $accountNumber 余额: $balance"
}

// 使用示例
fun main() {
    val account = BankAccount("123456789", 1000.0)
    account.deposit(500.0)
    println(account) // 输出: 账户 123456789 余额: 1500.0
    val success = account.withdraw(2000.0)
    println("取款${if (success) "成功" else "失败"}") // 输出: 取款失败
}

类的关系[编辑 | 编辑源代码]

Kotlin支持面向对象的基本关系:

  • 继承:使用:符号
  • 实现:接口同样使用:
  • 组合:通过属性包含其他类实例
open class Animal(val name: String) {  // open允许继承
    open fun makeSound() = "无声"
}

class Dog(name: String) : Animal(name) {
    override fun makeSound() = "汪汪!"
}

可见性修饰符[编辑 | 编辑源代码]

Kotlin提供四种可见性:

  • public(默认):随处可见
  • internal:同一模块内可见
  • protected:子类可见
  • private:类内可见

数据类[编辑 | 编辑源代码]

对于纯数据类,Kotlin提供特殊语法:

data class User(val id: Int, val name: String, val email: String)

数据类自动生成:

  • equals()/hashCode()
  • toString()
  • copy()
  • 组件函数(用于解构)

总结[编辑 | 编辑源代码]

Kotlin的类系统设计体现了现代语言特性:

  • 简洁的主构造函数语法
  • 属性自动生成访问器
  • 明确的初始化顺序
  • 丰富的类关系支持
  • 数据类的特殊优化

掌握Kotlin类基础是深入理解Kotlin面向对象编程的关键第一步。