原文: https://www.programiz.com/kotlin-programming/class-objects
Kotlin 支持函数和面向对象的编程。
Kotlin 支持诸如高阶函数,函数类型和 lambda 之类的功能,这使其成为函数编程风格的理想选择。 您将在后面的章节中了解这些概念。 本文将重点介绍 Kotlin 中的面向对象的编程风格。
在面向对象的编程风格中,可以通过创建对象将复杂的问题分为较小的集合。
这些对象具有两个特征:
- 状态
- 行为
让我们举几个例子:
Lamp
是对象 状态:on
或off
行为:turnOn
或turnOff
Bicycle
是对象 状态:currentGear
,twoWheels
,numberOfGear
等 行为:braking
,accelerating
,changingGears
等
您将继续学习面向对象编程的详细功能,例如:数据封装,继承和多态。 本文将重点介绍使事情保持简单的基础知识。
推荐阅读: 什么是对象?
在 Kotlin 中创建对象之前,需要定义一个类。
类是对象的蓝图。
我们可以将类视为房子的草图(原型)。 它包含有关地板,门,窗户等的所有详细信息。基于这些描述,我们建造了房屋。 房子是对象。
由于可以用相同的描述制作许多房屋,因此我们可以根据一个类创建许多对象。
要在 Kotlin 中定义一个类,请使用class
关键字:
class ClassName {
// property
// member function
... .. ...
}
这是一个例子:
class Lamp {
// property (data member)
private var isOn: Boolean = false
// member function
fun turnOn() {
isOn = true
}
// member function
fun turnOff() {
isOn = false
}
}
在这里,我们定义了一个名为Lamp
的类。
该类具有一个属性isOn
(以与变量相同的方式定义),并且具有两个成员函数turnOn()
和turnOff()
。
推荐阅读: Kotlin 函数
在 Kotlin 中,必须初始化属性或将其声明为abstract
(访问: Kotlin 抽象类,以了解更多信息)。 在上面的示例中,isOn
属性被初始化为false
。
类,对象,属性,成员函数等可以具有可见性修饰符。 例如,isOn
属性是私有的。 这意味着,只能从Lamp
类内部更改isOn
属性。
其他可见性修饰符是:
private
- 仅在类内部可见(可以访问)。public
- 随处可见。protected
- 类及其子类可见。internal
- 模块内的任何客户端都可以访问它们。
您稍后将在 Kotlin 可见性修饰符文章中了解protected
和internal
修饰符。
如果未指定可见性修饰符,则默认为public
。
在上述程序中,turnOn()
和turnOff()
成员函数是public
,而isOn
属性是私有的。
定义类时,仅定义对象的规范; 没有分配内存或存储空间。
要访问在类中定义的成员,您需要创建对象。 让我们创建Lamp
类的对象。
class Lamp {
// property (data member)
private var isOn: Boolean = false
// member function
fun turnOn() {
isOn = true
}
// member function
fun turnOff() {
isOn = false
}
}
fun main(args: Array<String>) {
val l1 = Lamp() // create l1 object of Lamp class
val l2 = Lamp() // create l2 object of Lamp class
}
该程序创建了Lamp
类的两个对象l1
和l2
。 两个灯l1
和l2
的on
属性为false
。
您可以使用.
表示法访问类的属性和成员函数。 例如,
l1.turnOn()
该语句为l1
对象调用turnOn()
函数。
让我们再举一个例子:
l2.isOn = true
在这里,我们试图将true
分配给l2
对象的isOn
属性。 请注意,isOn
属性为private
,如果您尝试从类外部访问isOn
,则会引发异常。
class Lamp {
// property (data member)
private var isOn: Boolean = false
// member function
fun turnOn() {
isOn = true
}
// member function
fun turnOff() {
isOn = false
}
fun displayLightStatus(lamp: String) {
if (isOn == true)
println("$lamp lamp is on.")
else
println("$lamp lamp is off.")
}
}
fun main(args: Array<String>) {
val l1 = Lamp() // create l1 object of Lamp class
val l2 = Lamp() // create l2 object of Lamp class
l1.turnOn()
l2.turnOff()
l1.displayLightStatus("l1")
l2.displayLightStatus("l2")
}
运行该程序时,输出为:
l1 Lamp is on.
l2 Lamp is off.
在上面的程序中
Lamp
类已创建。- 该类具有
isOn
属性和三个成员函数turnOn()
,turnOff()
和displayLightStatus()
。 - 在
main()
函数中创建了Lamp
类的两个对象l1
和l2
。 - 在此,使用
l1
对象:l1.turnOn()
调用turnOn()
函数。 此方法将l1
对象的isOn
实例变量设置为true
。 - 并且,使用
l2
对象:l1.turnOff()
调用turnOff()
函数。 此方法将l2
对象的isOff
实例变量设置为false
。 - 然后,针对
l1
和l2
对象调用displayLightStatus()
函数,根据这些对象的On
属性是true
还是false
。
请注意,isOn
属性已初始化为该类内部的false
。 创建该类的对象时,该对象的isOn
属性将自动初始化为false
。 因此,不需要l2
对象调用turnOff()
将isOn
属性设置为false
。
例如:
class Lamp {
// property (data member)
private var isOn: Boolean = false
// member function
fun turnOn() {
isOn = true
}
// member function
fun turnOff() {
isOn = false
}
fun displayLightStatus() {
if (isOn == true)
println("lamp is on.")
else
println("lamp is off.")
}
}
fun main(args: Array<String>) {
val lamp = Lamp()
lamp.displayLightStatus()
}
运行该程序时,输出为:
lamp is off.
本文只是 Kotlin 中面向对象编程的介绍。 依次检查这些章节以了解更多信息:
- Kotlin 构造器和初始化器
- Kotlin
this
关键字 - Kotlin 嵌套类