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()
}
- 未完成部分
- 可见性修饰符
- 继承
- 枚举类
- 数据
- 抽象类(那接口类的意义是什么呢)
- 封装等等