Kotlin第四阶段学习内容详情
Kotlin 第四阶段学习内容详情:类与对象
本阶段目标是掌握 Kotlin 面向对象基础,包括类、属性、构造函数、data class、object、继承和接口。学完后,你应该能用 Kotlin 表达用户、商品、订单、图书馆等常见业务模型。
建议用时:4-6 天。
阶段目标
- 能定义类、属性和方法。
- 能使用主构造函数和次构造函数。
- 能理解
data class的使用场景。 - 能使用
object创建单例。 - 能理解
companion object。 - 能使用
open和override完成继承。 - 能定义和实现接口。
第 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. val 和 var 的区别
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() {}
}
阶段复盘问题
- 类和对象有什么区别?
- 主构造函数有什么好处?
data class适合什么场景?object和class有什么区别?- 为什么 Kotlin 类默认不能继承?
- 接口表达的是什么?

浙公网安备 33010602011771号