Kotlin第四阶段学习内容详情

Kotlin 第四阶段学习内容详情:类与对象

本阶段目标是掌握 Kotlin 面向对象基础,包括类、属性、构造函数、data classobject、继承和接口。学完后,你应该能用 Kotlin 表达用户、商品、订单、图书馆等常见业务模型。

建议用时:4-6 天。

阶段目标

  • 能定义类、属性和方法。
  • 能使用主构造函数和次构造函数。
  • 能理解 data class 的使用场景。
  • 能使用 object 创建单例。
  • 能理解 companion object
  • 能使用 openoverride 完成继承。
  • 能定义和实现接口。

第 1 天:类、属性与方法

1. 定义类

class User

创建对象:

fun main() {
    val user = User()
    println(user)
}

2. 类中定义属性

class User {
    var name: String = ""
    var age: Int = 0
}

fun main() {
    val user = User()
    user.name = "Alice"
    user.age = 20

    println(user.name)
    println(user.age)
}

3. 类中定义方法

class User {
    var name: String = ""
    var age: Int = 0

    fun introduce() {
        println("大家好,我叫 $name,今年 $age 岁")
    }
}

fun main() {
    val user = User()
    user.name = "Alice"
    user.age = 20
    user.introduce()
}

第 2 天:构造函数

1. 主构造函数

Kotlin 常用主构造函数直接声明属性。

class User(val name: String, var age: Int) {
    fun introduce() {
        println("大家好,我叫 $name,今年 $age 岁")
    }
}

fun main() {
    val user = User("Alice", 20)
    user.introduce()
}

2. valvar 的区别

class User(val name: String, var age: Int)
  • name 使用 val,创建后不能修改。
  • age 使用 var,创建后可以修改。
fun main() {
    val user = User("Alice", 20)
    user.age = 21
    println(user.age)
}

3. 初始化代码块 init

class User(val name: String, var age: Int) {
    init {
        println("创建用户:$name")
    }
}

fun main() {
    val user = User("Alice", 20)
}

4. 次构造函数

class User(val name: String, var age: Int) {
    constructor(name: String) : this(name, 18)
}

fun main() {
    val user = User("Bob")
    println(user.age)
}

初学阶段优先使用主构造函数,次构造函数了解即可。

第 3 天:data class

1. 什么是 data class

data class 适合表示数据模型,比如用户、商品、订单。

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

fun main() {
    val user = User(1, "Alice", 20)
    println(user)
}

data class 会自动生成常用能力,比如:

  • 更友好的 toString()
  • 按属性比较的 equals()
  • 复制对象的 copy()

2. copy()

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

fun main() {
    val user = User(1, "Alice", 20)
    val newUser = user.copy(age = 21)

    println(user)
    println(newUser)
}

3. 解构声明

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

fun main() {
    val user = User(1, "Alice", 20)
    val (id, name, age) = user

    println(id)
    println(name)
    println(age)
}

第 4 天:object 与伴生对象

1. object 单例

object 用于创建全局唯一对象。

object AppConfig {
    val appName = "Kotlin Study"
    val version = "1.0.0"
}

fun main() {
    println(AppConfig.appName)
    println(AppConfig.version)
}

2. 工具对象

object StringUtils {
    fun isBlank(text: String?): Boolean {
        return text == null || text.isEmpty()
    }
}

fun main() {
    println(StringUtils.isBlank(null))
    println(StringUtils.isBlank("Kotlin"))
}

3. 伴生对象 companion object

companion object 放在类里面,常用于提供和类相关的常量或工厂方法。

class User(val name: String) {
    companion object {
        const val DEFAULT_NAME = "匿名用户"

        fun createDefault(): User {
            return User(DEFAULT_NAME)
        }
    }
}

fun main() {
    val user = User.createDefault()
    println(user.name)
}

第 5 天:继承与接口

1. Kotlin 类默认不能被继承

如果一个类允许被继承,需要加 open

open class Animal(val name: String) {
    open fun speak() {
        println("$name 发出声音")
    }
}

class Dog(name: String) : Animal(name) {
    override fun speak() {
        println("$name 汪汪叫")
    }
}

fun main() {
    val dog = Dog("小黑")
    dog.speak()
}

2. 接口

接口定义能力,类负责实现。

interface Flyable {
    fun fly()
}

class Bird : Flyable {
    override fun fly() {
        println("鸟在飞")
    }
}

fun main() {
    val bird = Bird()
    bird.fly()
}

综合练习

练习 1:用户模型

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

fun main() {
    val user = User(1, "Alice", 20)
    val olderUser = user.copy(age = 21)

    println(user)
    println(olderUser)
}

练习 2:图书管理

data class Book(val title: String, val author: String, val price: Int)

class Library(val name: String) {
    fun printBook(book: Book) {
        println("图书馆:$name,书名:${book.title},作者:${book.author}")
    }
}

fun main() {
    val book = Book("Kotlin 入门", "匿名作者", 59)
    val library = Library("城市图书馆")
    library.printBook(book)
}

练习 3:动物继承

open class Animal(val name: String) {
    open fun speak() {
        println("$name 发出声音")
    }
}

class Cat(name: String) : Animal(name) {
    override fun speak() {
        println("$name 喵喵叫")
    }
}

fun main() {
    val cat = Cat("小白")
    cat.speak()
}

必须掌握清单

常见错误

1. 忘记 open

class Animal
class Dog : Animal() // 错误

应改为:

open class Animal
class Dog : Animal()

2. 忘记 override

open class Animal {
    open fun speak() {}
}

class Dog : Animal() {
    fun speak() {} // 错误
}

应改为:

class Dog : Animal() {
    override fun speak() {}
}

阶段复盘问题

  1. 类和对象有什么区别?
  2. 主构造函数有什么好处?
  3. data class 适合什么场景?
  4. objectclass 有什么区别?
  5. 为什么 Kotlin 类默认不能继承?
  6. 接口表达的是什么?
posted @ 2026-06-30 10:56  呢哇哦比较  阅读(8)  评论(0)    收藏  举报