博主也是刚开始学习 Kotlin 没多久,本文是对《第一行代码》- 第三版中主构造函数和次构造函数的总结。非常推荐这本书作为 Kotlin 入门,建议可以自己把书中的例子自己敲一遍。
Kotlin 中的继承
open class People {
}
Java 中类是可以默认继承的,但是 Kotlin 不一样。如果想要在 Kotlin 中的类被继承,那么需要使用关键字 open。
class Student : People() {
}
Java 中继承使用 extends,Kotlin 中继承使用 " : " 来处理。Java 中类继承不需要括号, Kotlin 中类继承需要括号。
主构造函数
- 父类无参构造函数
//不带参数
class Student (): People() {
}
每个类有个默认不带参数的主构造函数。
主构造函数的特点-> 没有函数体,直接定义在类名后。
//带参数
class Student(sno: String, grade: Int) : People() {
}
Java 和 Kotlin 一样,子类的构造函数必须调用父类的构造函数。
上面代码中 Student 类初始化主构造函数时候会调用 People 类的无参主构造函数,即使没有参数也不能省略,所以这也是 Kotlin 中继承类有括号的原因。
- 父类有参构造函数
class Student(sno: String, grade: Int, name: String, age: Int) : People(name, age) {
}
当父类主构造函数带参数时,由于子类必须实现父类主构造函数,所以可以在子类的主构造函数中加入父类构造函数需要的参数。
次构造函数
class Student(sno: String, grade: Int, name: String, age: Int) : People(name, age) {
constructor(name: String, age: Int) : this("", 0, name, age) {
}
constructor() : this("", 0) {
}
}
1-> 次构造函数通过 constructor 关键字定义
2-> Kotlin 规定所有次构造函数必须调用主构造函数
有没有很像 Java 中的重载
- 特殊情况,子类和父类都没有构造函数
class Students : Persons {
constructor(name: String, age: Int) : super(name, age) {
}
}
open class Persons {
constructor(name: String, age: Int) {
}
}
子类没有主构造函数所以不用带括号,同理父类也是一样。
this 关键字和 super 关键字也会比较好理解。
网友评论