val student = Student("a123", 5)
[原文来自:www.11jj.com]
这样我们就创建了一个Student的对象,同时指定该学生的学号是a123,,年级是5。另外由于构造函数中的参数是在创建实例的时候传入的,不像之前的写法那样还得重新赋值,因此我们可以将参数全部声明成val。
那或许有的朋友可能会问了,主构造函数没有函数体,如果我想在主构造函数中编写一些逻辑该怎么办呢?Kotlin给我们提供了一个init结构体,所有主构造函数中的逻辑都可以写在这里:
class Student(val sno: String, val grade: Int) : Person() {
init {
println("sno is " + sno)
println("grade is " + grade)
}
}
这里我只是简单打印了一下学号和年级的值,现在如果我们再去创建一个Student类的实例,一定会将构造函数中传入值的打印出来。
到这里为止都还挺好理解的吧,但是这和那对括号又有什么关系呢?这就牵扯到了Java继承特性中的一个规定,子类中的构造函数必须得调用父类中的构造函数,这个规定在Kotlin中也要遵守。
那么再来回头看一下Student类,现在我们声明了一个主构造函数,根据继承特性的规定,子类的构造函数必须得调用父类的构造函数,可是主构造函数并没有函数体,我们怎样去调用父类的构造函数呢?有的朋友可能会说,在init结构体当中去调用不就好了,这或许是一种办法,但却不是一种好办法,因为绝大多数的场景我们都是不需要编写init结构体的。
Kotlin当然没有采用这种设计,而是用了另外一种简单但是可能不太好理解的设计方式:括号。子类的主构造函数调用父类中的哪个构造函数,通过在父类的后面加上括号来指定。因此再来看一遍这段代码,大家应该就能理解了吧:
class Student(val sno: String, val grade: Int) : Person() {
}
在这里,Person类后面的一对空括号表示Student类的主构造函数在初始化的时候会调用Person类的无参数构造函数,即使在无参数的情况下,这对括号也不能省略。
而如果我们将Person改造一下,将姓名和年龄都放到主构造函数当中,如下所示:
open class Person(val name: String, val age: Int) {
...
}
大家好,小乐今天来为大家解答绣球花养护注意事项以下问题,绣球养花技巧很多人还不知道,现在让我们一起来看看吧!1、绣球花喜湿但是怕涝,
第六单元 运算律课题:运用乘法分派律进行轻便较量 第 3 课时 总第 课时教授方针:1.让学生在解决实际问题的过程中发现并懂得乘法分派律,学
大家好,小娟今天来为大家解答梦的翅膀受了伤简谱以下问题,梦的翅膀受了伤翻唱特别好听很多人还不知道,现在让我们一起来看看吧!1、《梦的
大家好,小美今天来为大家解答妈妈的朋友中文字幕以下问题,单身妈妈韩剧电视剧免费观看很多人还不知道,现在让我们一起来看看吧!1、请直接
合作/推广:sdjf0757(微旌旗)美容美发是好多人都邑选择的消费但个体不良商家对准消费者的爱美之心使用过时产物、诱导消费、子虚宣传精心设置
首届“奇秀不减雁荡·东坡杯”五莲山水文学大赛征稿启事为深入贯彻习近平新时代中国特色社会主义思惟和党的二十大精神,果断文化自信,深条理
点击上方蓝字免费订阅!!慢城太白传媒,您生活中的贴心伴侣! 昨晚宝鸡融媒发布了一条视频↓↓↓北京西站男子晕厥宝鸡大夫紧要急救引得大
往期出色谋划 / 共青团黑龙江职业学院委员会运营 / 校大学生新媒体运营中心总监 / 石 倩 监制 / 梁 立 唐晓恬总编 / 马雨薇审核 / 马 莉 魏刘欣
Copyright 2024.依依自媒体,让大家了解更多图文资讯!