Kotlin支持功能和面向对象的编程。
Kotlin支持诸如高阶函数 , 函数类型和lambda之 类的 功能 ,这使其成为使用函数式编程风格的理想选择。您将在后面的章节中了解这些概念。本文将重点介绍Kotlin中的面向对象编程风格。
面向对象编程(OOP)
在面向对象的编程风格中,可以通过创建对象将复杂的问题分成较小的集合。
这些对象具有两个特征:
- 州
- 行为
让我们举几个例子:
- 灯是物体
- 它可以处于打开或关闭状态。
- 您可以
turn on
和turn off
指示灯(行为)。
- 自行车是一个对象
- 它具有当前档位 , 两个车轮 , 档位数量等状态。
- 它具有制动 , 加速 , 变速等特性。
您将继续学习面向对象编程的详细功能,例如: 数据封装 , 继承和多态 。本文将重点介绍使事情保持简单的基础知识。
推荐阅读:什么是物体?
科特林班
在Kotlin中创建对象之前,需要定义一个类。
类是对象的蓝图。
我们可以将类视为房子的草图(原型)。它包含有关地板,门,窗户等的所有详细信息。基于这些描述,我们建造了房屋。房子是对象。
由于可以用相同的描述制作许多房屋,因此我们可以根据一个类创建许多对象。
如何在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属性是私有的。
Kotlin对象
定义类时,仅定义对象的规范;没有分配内存或存储空间。
要访问在类中定义的成员,您需要创建对象。让我们创建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) {
val l1 = Lamp() // create l1 object of Lamp class
val l2 = Lamp() // create l2 object of Lamp class
}
该程序创建Lamp类的两个对象l1和l2 。灯l1和l2的isOn属性均为false
。
如何访问会员?
您可以使用来访问类的属性和成员函数.
符号。例如,
l1.turnOn()
该语句为l1对象调用turnOn() 函数 。
让我们再举一个例子:
l2.isOn = true
在这里,我们尝试将true
分配给l2对象的isOn属性。请注意, isOn属性是private
,并且如果您尝试从类外部访问isOn ,则会引发异常。
示例:Kotlin类和对象
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) {
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对象调用
turnOn()
函数 :l1.turnOn()
。此方法将l1对象的isOn实例变量设置为true
。 - 并且,使用l2对象
l1.turnOff()
调用turnOff()
函数 。此方法将l2对象的isOff实例变量设置为false
。 - 然后,对l1和l2对象调用
displayLightStatus()
函数 ,displayLightStatus()
函数根据isOn属性是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) {
val lamp = Lamp()
lamp.displayLightStatus()
}
运行该程序时,输出为:
lamp is off.
本文只是Kotlin中面向对象编程的简介。依次检查这些章节以了解更多信息:
- Kotlin构造函数和初始化程序
- Kotlin这个关键字
- Kotlin嵌套类