📜  Kotlin类和对象

📅  最后修改于: 2020-10-05 14:39:50             🧑  作者: Mango

在本文中,将向您介绍Kotlin中的面向对象编程。您将学习什么是类,如何创建对象以及如何在程序中使用它。

Kotlin支持功能和面向对象的编程。

Kotlin支持诸如高阶函数函数类型lambda之 类的 功能 ,这使其成为使用函数式编程风格的理想选择。您将在后面的章节中了解这些概念。本文将重点介绍Kotlin中的面向对象编程风格。


面向对象编程(OOP)

在面向对象的编程风格中,可以通过创建对象将复杂的问题分成较小的集合。

这些对象具有两个特征:

  • 行为

让我们举几个例子:

  1. 是物体
    • 它可以处于打开关闭状态。
    • 您可以turn onturn off指示灯(行为)。
  2. 自行车是一个对象
    • 它具有当前档位两个车轮档位数量等状态。
    • 它具有制动加速变速等特性。

您将继续学习面向对象编程的详细功能,例如: 数据封装继承多态 。本文将重点介绍使事情保持简单的基础知识。

推荐阅读:什么是物体?


科特林班

在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可见性修改器文章中了解protectedinternal修改器。

如果未指定可见性修改器,则默认情况下它将是public的。

在上面的程序中, turnOn()turnOff() 成员函数是publicisOn属性是私有的。


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类的两个对象l1l2 。灯l1l2isOn属性均为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类的两个对象l1l2
  • 在这里,使用l1对象调用turnOn() 函数 : l1.turnOn() 。此方法将l1对象的isOn实例变量设置为true
  • 并且,使用l2对象l1.turnOff()调用turnOff() 函数 。此方法将l2对象的isOff实例变量设置为false
  • 然后,对l1l2对象调用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嵌套类