Kotlin的主构造函数

主构造函数没有函数体,如果想在主构造函数中写一些逻辑,Kotlin提供了一个init结构体,所有主构造函数中的逻辑都可以写在里面:

class Student(val sno: String, val grade: Int) : Person(){
    init {
        println("sno is $sno")
        println("grade is $grade")
    }
}

在这里,Person类后面的一对空括号表示Student类的主构造函数在初始化的时候会调用Person类的无参数构造函数,即使在无参数的情况下,这对括号也不能省略。

 

open class Person(val name:String, val age: Int) {
    fun eat() = println("name is $name, age is $age")
}
class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
    init {
        println("sno is $sno")
        println("grade is $grade")
    }

    var score: Int = 0
}

我们在Student类的主构造函数中增加name和age这两个字段时,不能再将它们声明成val,因为在主构造函数中声明成val或者var的参数将自动成为该类的字段,这就会导致和父类中同名的name和age字段造成冲突。因此,这里的name和age参数前面不用加任何关键字,让它的作用域仅限定在主构造函数中即可

几乎用不到次构造函数,Kotlin提供了一个给函数设定参数默认值的功能,基本上可以替代次构造函数的作用。。。不过次构造函数有函数体。

posted @ 2024-02-21 21:25  touchmore  阅读(13)  评论(0编辑  收藏  举报