为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第6天 一课掌握Kotlin 突破开发语言瓶颈

标签:
Kotlin

课程信息

课程内容

构造器的基本写法

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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
4
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消