# Kotlin 类和对象

> 原文： [https://www.programiz.com/kotlin-programming/class-objects](https://www.programiz.com/kotlin-programming/class-objects)

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

Kotlin 支持函数和面向对象的编程。

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

* * *

## 面向对象编程（OOP）

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

这些对象具有两个特征：

*   状态
*   行为

让我们举几个例子：

1.  `Lamp`是对象
    **状态**：`on`或`off`
    **行为**：`turnOn`或`turnOff`
2.  `Bicycle`是对象
    **状态**：`currentGear`，`twoWheels`，`numberOfGear`等
    **行为**：`braking`，`accelerating`，`changingGears`等

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

**推荐阅读**： [什么是对象？](https://docs.oracle.com/javase/tutorial/java/concepts/object.html)

* * *

## Kotlin 类

在 Kotlin 中创建对象之前，需要定义一个类。

类是对象的蓝图。

我们可以将类视为房子的草图（原型）。 它包含有关地板，门，窗户等的所有详细信息。基于这些描述，我们建造了房屋。 房子是对象。

由于可以用相同的描述制作许多房屋，因此我们可以根据一个类创建许多对象。

* * *

### 如何在 Kotlin 中定义一个类？

要在 Kotlin 中定义一个类，请使用`class`关键字：

```kt
class ClassName {
    // property
    // member function
    ... .. ...
}

```

这是一个例子：

```kt
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 函数](https://kotlinlang.org/docs/reference/functions.html "Kotlin functions")

在 Kotlin 中，必须初始化属性或将其声明为`abstract`（**访问**： *Kotlin 抽象类*，以了解更多信息）。 在上面的示例中，`isOn`属性被初始化为`false`。

* * *

类，对象，属性，成员函数等可以具有可见性修饰符。 例如，`isOn`属性是私有的。 这意味着，只能从`Lamp`类内部更改`isOn`属性。

其他可见性修饰符是：

*   `private` - 仅在类内部可见（可以访问）。
*   `public` - 随处可见。
*   `protected` - 类及其子类可见。
*   `internal` - 模块内的任何客户端都可以访问它们。

您稍后将在 [Kotlin 可见性修饰符](/kotlin-programming/visibility-modifiers "Kotlin visibility modifiers")文章中了解`protected`和`internal`修饰符。

如果未指定可见性修饰符，则默认为`public`。

在上述程序中，`turnOn()`和`turnOff()`成员函数是`public`，而`isOn`属性是私有的。

* * *

### Kotlin 对象

定义类时，仅定义对象的规范； 没有分配内存或存储空间。

要访问在类中定义的成员，您需要创建对象。 让我们创建`Lamp`类的对象。

```kt
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`。

* * *

### 如何访问成员？

您可以使用`.`表示法访问类的属性和成员函数。 例如，

```kt
l1.turnOn()
```

该语句为`l1`对象调用`turnOn()`函数。

让我们再举一个例子：

```kt
l2.isOn = true
```

在这里，我们试图将`true`分配给`l2`对象的`isOn`属性。 请注意，`isOn`属性为`private`，如果您尝试从类外部访问`isOn`，则会引发异常。

* * *

### 示例：Kotlin 类和对象

```kt
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")
}
```

运行该程序时，输出为：

```kt
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`。

例如：

```kt
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()
}

```

运行该程序时，输出为：

```kt
lamp is off.
```

* * *

本文只是 Kotlin 中面向对象编程的介绍。 依次检查这些章节以了解更多信息：

*   *Kotlin 构造器和初始化器*
*   *Kotlin `this`关键字*
*   *Kotlin 嵌套类*