课程信息
课程名称: 一课掌握Kotlin 突破开发语言瓶颈
课程章节: 类的构造器(7-1)
课程讲师: bennyhuo
课程内容
构造器的基本写法
class Person(var age: Int, name: String)
参数带有val/var,类内全局可见
参数没有val/var,构造器内可见(init块,属性初始化)
init块
- 类似主构造器的方法体
- init块可以有多个
- init块最终会合并执行
属性必须初始化
Kotlin不会盲目地帮我们初始化属性,开发者必须清楚的认识如何维护属性的生命周期
继承父类
abstract class Animal
class Person(var age: Int, var name: String): Animal()
继承父类是必须调用父类的构造器
副构造器
- 定义了主构造器后在类内部再定义的构造器都被称为副构造器
- 副构造器必须调用主构造器,或者调用调用了主构造器的方法,确保构造路径唯一
class Person(var age: Int, var name: String): Animal() {
constructor(age: Int): this(age, "unknown")
}
Kotlin支持不定义主构造器,但是不推荐这种做法,因为多条构造路径,会增加类的复杂度
如果需要实现Java那种多构造器的场景,推荐使用主构造器+默认参数,再加上注释@JvmOverloads
class Person
@JvmOverloads
constructor(var age: Int, var name: String = "unknown") : Animal()
构造同名的工厂函数
class Person(var age: Int, var name: String = "unknown") {
override fun equals(other: Any?)
= (other as? Person)?.name?.equals(name) ?: false
override fun hashCode() = name.hashCode()
}
val persons = HashMap<String, Person>()
fun Person(name: String): Person {
return persons[name]
?: Person(1, name).also {persons[name] = it}
}
学习总结
在学习本章的时候,通过与Java的对比,除了可以重温Java一些基础知识,同时也深刻地认识到Kotlin构造器与Java的一些差别,比如Java的构造块和Kotlin的init块类似,但是Java构造块不可以访问构造器的参数,Kotlin的init块可以等等。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦