中级教程: 对象
在这一章中, 你将探索对象声明, 扩展对类的理解. 这些知识将帮助你高效的管理整个项目的行为.
对象声明
在 Kotlin 中, 你可以使用 对象 声明 来声明一个只有唯一实例的类. 从某种意义上说, 你在声明类的 同时 也就创建了唯一的实例. 当你想要创建一个类, 并以你的程序中的唯一引用点的方式使用它, 或者想要协调它在整个系统中的行为, 对象声明会非常有用.
Kotlin 中的对象是 延迟加载(lazy) 的, 意思就是说, 它们只在被访问的时候才创建. Kotlin 还会确保所有的对象以线程安全的方式创建, 因此你不必手动检查.
要创建一个对象声明, 请使用 object
关键字:
之后是你的 object
的名称, 并在大括号 {}
表示的对象 body 部中添加属性或成员函数.
例如, 假设你想要创建一个对象, 名为 DoAuth
, 负责身份验证:
这个对象有一个成员函数, 名为 takeParams
, 参数是 username
和 password
变量, 并打印一个字符串到控制台. 只有在函数初次被调用时, DoAuth
对象才会被创建.
数据对象(Data Object)
为了更容易的打印输出对象声明的内容, Kotlin 提供了 数据(Data) 对象. 与你在初学者教程中学过的数据类类似, 数据对象自动带有额外的成员函数: toString()
和 equals()
.
要创建一个数据对象, 请使用与对象声明相同的语法, 但前面加上 data
关键字:
例如:
关于数据对象, 详情请参见 数据对象.
同伴对象(Companion Object)
在 Kotlin 中, 一个类可以带有一个对象: 一个 同伴(Companion) 对象. 对每个类, 你只能有 一个 同伴对象. 只有在类初次被引用时, 同伴对象才会被创建.
在同伴对象之内声明的任何属性或函数, 都在类的所有实例之间共享.
要在一个类之内创建一个同伴对象, 请使用与对象声明相同的语法, 但前面加上 companion
关键字:
要访问同伴对象的任何属性或函数, 请通过类名称来引用它. 例如:
这个示例创建了一个类, 名为 BigBen
, 它包含一个同伴对象, 名为 Bonger
. 同伴对象有一个成员函数, 名为 getBongs()
, 接受一个整数参数, 并打印 "BONG"
到控制台, 打印次数与整数参数相同.
在 main()
函数 中, 通过类的名称调用了 getBongs()
函数. 同伴对象会在这个时候被创建. 调用 getBongs()
函数的参数是 12
.
详情请参见 同伴对象(Companion Object).
实际练习
习题 1
你运营着一个咖啡店, 并有一个系统来追踪客户订单. 请参考下面的代码, 并完成第 2 个数据对象的声明, 让 main()
函数中的以下代码成功运行:
习题 2
创建一个对象声明, 继承自 Vehicle
接口, 以创建一个唯一的车辆类型: FlyingSkateboard
. 实现你的对象中的 name
属性和 move()
函数, 让 main()
函数中的以下代码成功运行:
习题 3
你有一个 App, 你想要用它记录温度. 类本身使用摄氏单位保存信息, 但你想要提供一个简单方法, 创建华氏单位的实例. 请完成数据类, 让 main()
函数中的以下代码成功运行:
- 提示
使用同伴对象.