02 | 面向对象:理解Kotlin设计者的良苦用心
- 深入了解
- 翻译
- 解释
- 总结
Kotlin面向对象编程的特点和优势是本文的主题。文章通过对比Kotlin和Java的语法差异,突出了Kotlin语言的简洁性和易读性。作者以Person类为例,展示了Kotlin中类的定义和属性的使用,强调了Kotlin属性的自定义getter方法。此外,文章还介绍了Kotlin中抽象类、继承、接口和实现的语法特点,以及Kotlin中嵌套类的设计。文章还详细介绍了Kotlin中的数据类和密封类,展示了它们在实际应用中的优势和用法。通过具体的代码示例和对比分析,读者可以更好地理解和运用Kotlin语言。总的来说,本文内容涵盖了Kotlin语言的核心特性,为读者提供了全面的了解和学习Kotlin的基础知识。文章深入浅出地介绍了Kotlin面向对象编程的特点和优势,对于想要学习或深入了解Kotlin语言的读者来说,是一篇很有价值的技术文章。
《朱涛 · Kotlin 编程第一课》,新⼈⾸单¥59
全部留言(24)
- 最新
- 精选
- 夜班同志应该说明下 密封类是子类固定,枚举是对象固定 吧
作者回复: 很好的补充,感谢建议,记下了。
2022-01-19223 - 夜月接口的属性: 1.不能设置初始值 2.val可以重写get,var的get和set都不能重写
作者回复: 赞!
2022-01-01412 - 白乾涛Kotlin 的继承是默认封闭的,这样岂不是要经常修改基础类吗?特别是对于那些开源库来说
作者回复: 是的,这样一来,对开源库的维护者来说,有了更高的要求,我们需要明确自己的代码中哪些是封闭的,哪些是开放的。 表面上看,Kotlin变得麻烦了。不过,反过来看,这难道不就是维护者本来就该弄清楚的问题吗?其实,这个问题一直存在,只是因为Java选择忽视这个问题,而Kotlin的选择是面对这个问题。
2022-01-1429 - Geek_70c6da请教老师,kotlin对象的深拷贝有什么优雅的写法吗
作者回复: 有的,我们可以通过元编程来解决。这个问题我会记录下来,后面找机会跟大家分享一下。
2021-12-307 - 初升的太阳由于我们的密封类只有这三种情况,所以我们的 when 表达式不需要 else 分支。可以看到,这样的代码风格,既实现了类似枚举类的逻辑完备性,还完美实现了数据结构的封装。 没看出来和枚举的区别
作者回复: 请注意:枚举类没办法和数据类进行结合,来承载我们的网络请求数据。但是密封类可以。
2021-12-2957 - JakePrim密封类不是很理解,为什么密封类的内部 要使用data class 呢?如何正确的定义密封类?
作者回复: 并不是说所有的密封类都要用data class,只是在这个案例当中,我们是用来承载网络请求数据的。既然是承载数据,当然就要用数据类啦!至于如何正确定义密封类,其实文章当中的这种模式就是最常见,也是最使用的方式。
2021-12-2935 - 百炼钢密封类的设计目的没太明白,可能我对java的枚举理解不深,导致老师用枚举来解释密封类,让我更糊涂了… 自问:密封类设计目的是为了辅助 when 表达式的使用吗?按文中的例子也可以用继承来实现,那么密封类的作用就是简化代码吗?
作者回复: 枚举类、密封类的特点就是when表达式“自动判断完备”,咱们自己写的继承类,是不具备这一优势的。别小看“自动判断完备”,它的作用很大。
2022-02-2474 - 白乾涛val (name, age) = tom 这里的顺序是和构造方法里面的一致呢 还是不需要一致,只需要变量名一样呢
作者回复: 按照顺序的,这一点我们写一个简单的代码就可以验证。 // 不推荐, val (age, name) = Person1("tom", 1) println(age) println(name) 但是,正确做法,我们应该是让变量名与顺序都一致。
2022-01-144 - A Lonely Cat相应地,如果想在 Kotlin 当中定义一个普通的内部类,我们需要在嵌套类的前面加上 inner 关键字。 这下面的代码有误,IDE 会报错,我猜朱老师是想写下面这段代码吧 init { println(name) foo() }
作者回复: 写文章的时候为了突出重点忘记兼顾语法了,我重新调整一下。感谢你指出这个问题,你让这个课程变得更好了。
2022-01-103 - 郑峰You can declare properties in interfaces. A property declared in an interface can either be abstract or provide implementations for accessors. Properties declared in interfaces can't have backing fields, and therefore accessors declared in interfaces can't reference them.
作者回复: 嗯,不错。
2022-01-102