朱涛 · Kotlin 编程第一课
朱涛
Google 认证的 Kotlin、Android 开发者专家,博客“Kotlin Jetpack 实战”作者
6717 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
朱涛 · Kotlin 编程第一课
15
15
1.0x
00:00/00:00
登录|注册

02 | 面向对象:理解Kotlin设计者的良苦用心

你好,我是朱涛。这节课,我们来学习 Kotlin 的面向对象编程:类、接口、继承、嵌套,以及 Kotlin 独有的数据类和密封类。
面向对象(Object Oriented)是软件开发方法,也是计算机界应用最广的一种编程范式。它是把程序的“数据”和“方法”作为一个整体来看待,将其抽象成了一个具体的模型,从而更贴近事物的自然运行模式。它的特点是简单易懂,符合人类的思维模式。
在“面向对象”的概念上,虽然 Kotlin 和 Java 之间有一定的语法差异,但底层的思想是没有变的。比如 Java 和 Kotlin 当中,都有类、接口、继承、嵌套、枚举的概念,唯一区别就在于这些概念在两种语言中的具体语法不同。我们需要做的,仅仅只是为我们脑海里已经熟知的概念,再增加一种语法规则而已。
而如果你没有 Java 基础也没关系,今天这节课要学习的内容,几乎是所有编程语言都需要掌握的概念。在掌握了 Kotlin 面向对象的编程思想后,如果你再去学习其他编程语言,你也照样可以快速迁移这些知识点。
当然,Kotlin 作为一门新的语言,它也创造了一些新的东西,比如数据类、密封类、密封接口等。这些 Kotlin 的新概念,会是我们需要着重学习的对象。实际上,也正是因为 Kotlin 的这些独有概念,使得它形成了一种独特的编程风格和编程思想。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kotlin面向对象编程的特点和优势是本文的主题。文章通过对比Kotlin和Java的语法差异,突出了Kotlin语言的简洁性和易读性。作者以Person类为例,展示了Kotlin中类的定义和属性的使用,强调了Kotlin属性的自定义getter方法。此外,文章还介绍了Kotlin中抽象类、继承、接口和实现的语法特点,以及Kotlin中嵌套类的设计。文章还详细介绍了Kotlin中的数据类和密封类,展示了它们在实际应用中的优势和用法。通过具体的代码示例和对比分析,读者可以更好地理解和运用Kotlin语言。总的来说,本文内容涵盖了Kotlin语言的核心特性,为读者提供了全面的了解和学习Kotlin的基础知识。文章深入浅出地介绍了Kotlin面向对象编程的特点和优势,对于想要学习或深入了解Kotlin语言的读者来说,是一篇很有价值的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《朱涛 · Kotlin 编程第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • 夜班同志
    应该说明下 密封类是子类固定,枚举是对象固定 吧

    作者回复: 很好的补充,感谢建议,记下了。

    2022-01-19
    2
    23
  • 夜月
    接口的属性: 1.不能设置初始值 2.val可以重写get,var的get和set都不能重写

    作者回复: 赞!

    2022-01-01
    4
    12
  • 白乾涛
    Kotlin 的继承是默认封闭的,这样岂不是要经常修改基础类吗?特别是对于那些开源库来说

    作者回复: 是的,这样一来,对开源库的维护者来说,有了更高的要求,我们需要明确自己的代码中哪些是封闭的,哪些是开放的。 表面上看,Kotlin变得麻烦了。不过,反过来看,这难道不就是维护者本来就该弄清楚的问题吗?其实,这个问题一直存在,只是因为Java选择忽视这个问题,而Kotlin的选择是面对这个问题。

    2022-01-14
    2
    9
  • Geek_70c6da
    请教老师,kotlin对象的深拷贝有什么优雅的写法吗

    作者回复: 有的,我们可以通过元编程来解决。这个问题我会记录下来,后面找机会跟大家分享一下。

    2021-12-30
    7
  • 初升的太阳
    由于我们的密封类只有这三种情况,所以我们的 when 表达式不需要 else 分支。可以看到,这样的代码风格,既实现了类似枚举类的逻辑完备性,还完美实现了数据结构的封装。 没看出来和枚举的区别

    作者回复: 请注意:枚举类没办法和数据类进行结合,来承载我们的网络请求数据。但是密封类可以。

    2021-12-29
    5
    7
  • JakePrim
    密封类不是很理解,为什么密封类的内部 要使用data class 呢?如何正确的定义密封类?

    作者回复: 并不是说所有的密封类都要用data class,只是在这个案例当中,我们是用来承载网络请求数据的。既然是承载数据,当然就要用数据类啦!至于如何正确定义密封类,其实文章当中的这种模式就是最常见,也是最使用的方式。

    2021-12-29
    3
    5
  • 百炼钢
    密封类的设计目的没太明白,可能我对java的枚举理解不深,导致老师用枚举来解释密封类,让我更糊涂了… 自问:密封类设计目的是为了辅助 when 表达式的使用吗?按文中的例子也可以用继承来实现,那么密封类的作用就是简化代码吗?

    作者回复: 枚举类、密封类的特点就是when表达式“自动判断完备”,咱们自己写的继承类,是不具备这一优势的。别小看“自动判断完备”,它的作用很大。

    2022-02-24
    7
    4
  • 白乾涛
    val (name, age) = tom 这里的顺序是和构造方法里面的一致呢 还是不需要一致,只需要变量名一样呢

    作者回复: 按照顺序的,这一点我们写一个简单的代码就可以验证。 // 不推荐, val (age, name) = Person1("tom", 1) println(age) println(name) 但是,正确做法,我们应该是让变量名与顺序都一致。

    2022-01-14
    4
  • A Lonely Cat
    相应地,如果想在 Kotlin 当中定义一个普通的内部类,我们需要在嵌套类的前面加上 inner 关键字。 这下面的代码有误,IDE 会报错,我猜朱老师是想写下面这段代码吧 init { println(name) foo() }

    作者回复: 写文章的时候为了突出重点忘记兼顾语法了,我重新调整一下。感谢你指出这个问题,你让这个课程变得更好了。

    2022-01-10
    3
  • 郑峰
    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-10
    2
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部