2.2 Kotlin 面向对象

2. Kotlin 面向对象

1. 类

fun main() {
//    val s = Student("180", 9, "liao", 26)
//    s.eat()
    val ss = Student()  // 构造函数调用顺序
    doStudy(ss)
}

open class Person(var name: String, var age: Int) {      // 加上 open 之后才允许被继承
    fun eat() {
        println("$name is eating. He is $age years old.")
    }
}

class FinalStudent(val sno: String = "sno", val grade : Int = 9, name : String = "name", age : Int = 26) :    // 只使用一个主构造函数来满足各种传参方式
        Person(name, age), Study {

        }

class Student(val sno: String, val grade: Int, name: String, age: Int) :
        Person(name, age), Study {  // 主构造函数,没有函数体
    init {                   // 没有函数体但是可以写 init 逻辑
        println("constructor0")
    }
    constructor(name: String, age: Int) : this("", 0, name, age) { println("constructor1") }     // 次构造函数1,调用主构造函数
    constructor() : this("", 0) {println("constructor2")}                                        // 次构造函数2,调用次构造函数1

    override fun readingBooks() {
        println("$name is reading")
    }
    override fun doHomeworks() {
        println("$name is doing homework")
    }
}

class Teacher : Person {                                                // 只有次构造函数,因此不需要()
    constructor(name : String, age : Int) : super(name, age) {}         // 没有主构造函数,调用父类构造函数
}

interface Study {           // 接口类不能实例化   但是似乎没有纯虚函数的概念,即必须实现所有纯虚函数才能实例化
    fun readingBooks(){}
    fun doHomeworks(){
        println("do homework")
    }
}

fun doStudy(study: Study?){   // 多态思想
    study?.readingBooks()
    study?.doHomeworks()
}
  • 未完成部分
    • 可见性修饰符
    • 继承
    • 枚举类
    • 数据
    • 抽象类(那接口类的意义是什么呢)
    • 封装等等
posted @ 2026-01-09 14:07  y丶innocence  阅读(1)  评论(0)    收藏  举报