Kotlin 类和对象 - Kotlin教程

由网友 大卫 发布 阅读 14

Kotlin 类和对象 - Kotlin教程

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

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

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

面向对象编程(OOP)

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

这些对象具有两个特征:

  • 状态

  • 行为

让我们举几个实例:

  1. Lamp(灯) 是一个对象

  • 它可以处于 on(亮着) 或 off(熄灭) 状态。

  • 你可以 turn on(开灯) 和turn off (关灯)(行为)。

  • Bicycle 是一个对象

    • 它有 档位,两个轮子,齿轮数 等状态。

    • 它有 刹车,加速,换挡 等行为。

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

    Kotlin 类

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

    类是对象的蓝图。

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

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

    在 Kotlin 中如何定义类?

    要在Kotlin中定义一个类,可以使用关键字 class:

    class ClassName {
        // 属性
        // 成员函数
        ... .. ...
    }

    这是一个实例:

    class Lamp {
    
        //属性(数据成员)
        private var isOn: Boolean = false
    
        // 成员函数
        fun turnOn() {
            isOn = true
        }
    
        // 成员函数
        fun turnOff() {
            isOn = false
        }
    }

    在这里,我们定义了一个名为 Lamp 的类。

    该类具有一个属性 isOn(定义方式与变量相同),并且具有两个成员函数 turnOn() 和 turnOff()。

    在Kotlin中,要么必须初始化属性,要么必须声明为 abstract。在上面的示例中,isOn 属性初始化为 false。

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

    其他可见性修饰符是:

    • private - 仅在类内部可见(可以访问)。

    • public - 所有地方可见。

    • protected - 对类及其子类可见。

    • internal - 模块内的任何客户端都可以访问它们。

    您稍后将在Kotlin可见性修饰符文章中了解protected和internal修改器。

    如果未指定可见性修饰符,则默认情况下为默认值 public 。

    在上面的程序中,turnOn()和turnOff()成员函数是公共的,而 isOn 属性是私有的。

    Kotlin 对象

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

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

    class Lamp {
    
        // 属性(数据成员)
        private var isOn: Boolean = false
    
        // 成员函数
        fun turnOn() {
            isOn = true
        }
    
        // 成员函数
        fun turnOff() {
            isOn = false
        }
    }
    
    fun main(args: Array<String>) {
    
        val l1 = Lamp() // 创建 Lamp 类的 l1对象
        val l2 = Lamp() // 创建 Lamp 类的 l2对象
    }

    此程序创建两个对象l1和l2类Lamp。该isOn两个灯泡性能l1和l2会false。

    如何访问成员?

    您可以使用 . 符号来访问类的属性和成员函数。例如,

    l1.turnOn()

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

    让我们再举一个实例:

    l2.isOn = true

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

    示例:Kotlin类和对象

    class Lamp {
    
        // 属性(数据成员)
        private var isOn: Boolean = false
    
        // 成员函数
        fun turnOn() {
            isOn = true
        }
    
        // 成员函数
        fun turnOff() {
            isOn = false
        }
    
        fun displayLightStatus(lamp: String) {
            if (isOn == true)
                println("$lamp 灯是亮着的。")
            else
                println("$lamp 灯是熄灭的。")
        }
    }
    
    fun main(args: Array<String>) {
    
        val l1 = Lamp() // 创建 Lamp 类的 l1对象
        val l2 = Lamp() // 创建 Lamp 类的 l2对象
    
        l1.turnOn()
        l2.turnOff()
    
        l1.displayLightStatus("l1")
        l2.displayLightStatus("l2")
    }

    运行该程序时,输出为:

    l1 灯是亮着的。
    l2 灯是熄灭的。

    在上面的程序中,

    • Lamp 类已创建。

    • 该类具有一个属性 isOn 和三个成员函数 turnOn(),turnOff() 以及 displayLightStatus()。

    • 在main()函数中创建了Lamp类的两个对象L1和L2。

    • 在这里,使用l1对象l1.turnOn()调用turnOn()函数。 此方法将l1对象的isOn实例变量设置为true。

    • 同时,使用 l2 对象:l2.turnOff()调用 turnOff()函数。 此方法将l2对象的isOff实例变量设置为false。

    • 然后,对l1和l2对象调用displayLightStatus()函数,该函数根据isOn属性是true还是false来打印适当的消息。

    注意,在类内部,isOn 属性被初始化为 false。 创建该类的对象时,该对象的 isOn 属性将自动初始化为 false。 因此,不需要 l2 对象调用 turnOff()将 isOn属性设置为false。

    例如:

    class Lamp {
    
        // 属性(数据成员)
        private var isOn: Boolean = false
    
        // 成员函数
        fun turnOn() {
            isOn = true
        }
    
        // 成员函数
        fun turnOff() {
            isOn = false
        }
    
        fun displayLightStatus() {
            if (isOn == true)
                println("灯亮着。")
            else
                println("灯熄灭了。")
        }
    }
    
    fun main(args: Array<String>) {
        val lamp = Lamp()
        lamp.displayLightStatus()
    }

    运行该程序时,输出为:

    灯熄灭了。

    本文只是Kotlin中面向对象编程的基础知识。

    Kotlin 继承 Kotlin 构造函数(Constructor)