主构造函数没有函数体,如果想在主构造函数中写一些逻辑,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提供了一个给函数设定参数默认值的功能,基本上可以替代次构造函数的作用。。。不过次构造函数有函数体。
标签:name,val,grade,Kotlin,age,sno,构造函数 From: https://www.cnblogs.com/touchmore/p/18026254