企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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 嵌套类*