Kotlin语言的次构造函数学习

280 阅读2分钟

Kotlin语言的次构造函数

kotlin

Kotlin 中的继承
1
2
3
open class People {

}

Java 中类是可以默认继承的,但是 Kotlin 不一样。如果想要在 Kotlin 中的类被继承,那么需要使用关键字 open。

1
2
3
class Student : People() {

}

Java 中继承使用 extends,Kotlin 中继承使用 " : " 来处理。Java 中类继承不需要括号, Kotlin 中类继承需要括号。


主构造函数
  • 父类无参构造函数
1
2
3
4
//不带参数
class Student (): People() {

}

每个类有个默认不带参数的主构造函数。
主构造函数的特点-> 没有函数体,直接定义在类名后。

1
2
3
4
//带参数
class Student(sno: String, grade: Int) : People() {

}

Java 和 Kotlin 一样,子类的构造函数必须调用父类的构造函数。
上面代码中 Student 类初始化主构造函数时候会调用 People 类的无参主构造函数,即使没有参数也不能省略,所以这也是 Kotlin 中继承类有括号的原因。

  • 父类有参构造函数
1
2
3
class Student(sno: String, grade: Int, name: String, age: Int) : People(name, age) {

}

当父类主构造函数带参数时,由于子类必须实现父类主构造函数,所以可以在子类的主构造函数中加入父类构造函数需要的参数。


次构造函数
1
2
3
4
5
6
7
8
9
10
11
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 中的重载
  • 特殊情况,子类和父类都没有构造函数
1
2
3
4
5
6
7
8
9
10
11
12
class Students : Persons {
    constructor(name: String, age: Int) : super(name, age) {

    }
}


open class Persons {
    constructor(name: String, age: Int) {

    }
}

子类没有主构造函数所以不用带括号,同理父类也是一样。
this 关键字和 super 关键字也会比较好理解。


主构造函数和次构造函数大概就介绍到这里了,如果有什么写得不对的地方欢迎指出。