Kotlin 類和對象

在本文中,將向您介紹Kotlin中的面向?qū)ο缶幊?。您將學(xué)習(xí)什么是類,如何創(chuàng)建對象以及如何在程序中使用它。

Kotlin支持函數(shù)和面向?qū)ο蟮木幊獭?/p>

Kotlin支持諸如高階函數(shù),函數(shù)類型lambda之類的函數(shù),這使其成為使用函數(shù)式編程風(fēng)格的理想選擇。您將在后面的章節(jié)中了解這些概念。本文將重點(diǎn)介紹Kotlin中的面向?qū)ο缶幊田L(fēng)格。

面向?qū)ο缶幊?OOP)

在面向?qū)ο蟮木幊田L(fēng)格中,可以通過創(chuàng)建對象將復(fù)雜的問題分為較小的集合。

這些對象具有兩個(gè)特征:

  • 狀態(tài)

  • 行為

讓我們舉幾個(gè)實(shí)例:

  1. Lamp(燈) 是一個(gè)對象

    • 它可以處于 on(亮著) 或 off(熄滅) 狀態(tài)。

    • 你可以 turn on(開燈) 和turn off (關(guān)燈)(行為)。

  2. Bicycle 是一個(gè)對象

    • 它有 檔位,兩個(gè)輪子,齒輪數(shù) 等狀態(tài)。

    • 它有 剎車,加速,換擋 等行為。

您將繼續(xù)學(xué)習(xí)面向?qū)ο缶幊痰脑敿?xì)功能,例如:數(shù)據(jù)封裝繼承 多態(tài)。本文將重點(diǎn)介紹使事情變得簡單的基礎(chǔ)知識。

Kotlin 類

在Kotlin中創(chuàng)建對象之前,您需要定義一個(gè)類。

類是對象的藍(lán)圖。

我們可以將類視為房子的草圖(原型)。它包含有關(guān)地板,門,窗戶等的所有詳細(xì)信息?;谶@些描述,我們建造了房屋。房子是對象。

由于可以用相同的描述建造許多房屋,因此我們可以根據(jù)一個(gè)類創(chuàng)建許多對象。

在 Kotlin 中如何定義類?

要在Kotlin中定義一個(gè)類,可以使用關(guān)鍵字 class:

class ClassName {
    // 屬性
    // 成員函數(shù)
    ... .. ...
}

這是一個(gè)實(shí)例:

class Lamp {

    //屬性(數(shù)據(jù)成員)
    private var isOn: Boolean = false

    // 成員函數(shù)
    fun turnOn() {
        isOn = true
    }

    // 成員函數(shù)
    fun turnOff() {
        isOn = false
    }
}

在這里,我們定義了一個(gè)名為 Lamp 的類。

該類具有一個(gè)屬性 isOn(定義方式與變量相同),并且具有兩個(gè)成員函數(shù) turnOn() 和 turnOff()。

在Kotlin中,要么必須初始化屬性,要么必須聲明為 abstract。在上面的示例中,isOn 屬性初始化為 false。

類,對象,屬性,成員函數(shù)等可以具有可見性修飾符。 例如,isOn屬性是私有的。 這意味著,只能在Lamp類內(nèi)部更改isOn屬性。

其他可見性修飾符是:

  • private - 僅在類內(nèi)部可見(可以訪問)。

  • public - 所有地方可見。

  • protected - 對類及其子類可見。

  • internal - 模塊內(nèi)的任何客戶端都可以訪問它們。

您稍后將在Kotlin可見性修飾符文章中了解protected和internal修改器。

如果未指定可見性修飾符,則默認(rèn)情況下為默認(rèn)值 public 。

在上面的程序中,turnOn()和turnOff()成員函數(shù)是公共的,而 isOn 屬性是私有的。

Kotlin 對象

定義類時(shí),僅定義對象的規(guī)范;沒有分配內(nèi)存或存儲(chǔ)空間。

要訪問在類中定義的成員,您需要?jiǎng)?chuàng)建對象。讓我們創(chuàng)建Lamp類的對象。

class Lamp {

    // 屬性(數(shù)據(jù)成員)
    private var isOn: Boolean = false

    // 成員函數(shù)
    fun turnOn() {
        isOn = true
    }

    // 成員函數(shù)
    fun turnOff() {
        isOn = false
    }
}

fun main(args: Array<String>) {

    val l1 = Lamp() // 創(chuàng)建 Lamp 類的 l1對象
    val l2 = Lamp() // 創(chuàng)建 Lamp 類的 l2對象
}

此程序創(chuàng)建兩個(gè)對象l1和l2類Lamp。該isOn兩個(gè)燈泡性能l1和l2會(huì)false。

如何訪問成員?

您可以使用 . 符號來訪問類的屬性和成員函數(shù)。例如,

l1.turnOn()

該語句調(diào)用對象 l1 的 turnOn() 函數(shù)。

讓我們再舉一個(gè)實(shí)例:

l2.isOn = true

在這里,我們嘗試分配 true 給對象 l2 的 isOn 屬性。請注意,isOnproperty 是 private,如果您嘗試從類外部訪問 isOn ,則會(huì)引發(fā)異常。

示例:Kotlin類和對象

class Lamp {

    // 屬性(數(shù)據(jù)成員)
    private var isOn: Boolean = false

    // 成員函數(shù)
    fun turnOn() {
        isOn = true
    }

    // 成員函數(shù)
    fun turnOff() {
        isOn = false
    }

    fun displayLightStatus(lamp: String) {
        if (isOn == true)
            println("$lamp 燈是亮著的。")
        else
            println("$lamp 燈是熄滅的。")
    }
}

fun main(args: Array<String>) {

    val l1 = Lamp() // 創(chuàng)建 Lamp 類的 l1對象
    val l2 = Lamp() // 創(chuàng)建 Lamp 類的 l2對象

    l1.turnOn()
    l2.turnOff()

    l1.displayLightStatus("l1")
    l2.displayLightStatus("l2")
}

運(yùn)行該程序時(shí),輸出為:

l1 燈是亮著的。
l2 燈是熄滅的。

在上面的程序中,

  • Lamp 類已創(chuàng)建。

  • 該類具有一個(gè)屬性 isOn 和三個(gè)成員函數(shù) turnOn(),turnOff() 以及 displayLightStatus()。

  • 在main()函數(shù)中創(chuàng)建了Lamp類的兩個(gè)對象L1和L2。

  • 在這里,使用l1對象l1.turnOn()調(diào)用turnOn()函數(shù)。 此方法將l1對象的isOn實(shí)例變量設(shè)置為true。

  • 同時(shí),使用 l2 對象:l2.turnOff()調(diào)用 turnOff()函數(shù)。 此方法將l2對象的isOff實(shí)例變量設(shè)置為false。

  • 然后,對l1和l2對象調(diào)用displayLightStatus()函數(shù),該函數(shù)根據(jù)isOn屬性是true還是false來打印適當(dāng)?shù)南ⅰ?/p>

注意,在類內(nèi)部,isOn 屬性被初始化為 false。 創(chuàng)建該類的對象時(shí),該對象的 isOn 屬性將自動(dòng)初始化為 false。 因此,不需要 l2 對象調(diào)用 turnOff()將 isOn屬性設(shè)置為false。

例如:

class Lamp {

    // 屬性(數(shù)據(jù)成員)
    private var isOn: Boolean = false

    // 成員函數(shù)
    fun turnOn() {
        isOn = true
    }

    // 成員函數(shù)
    fun turnOff() {
        isOn = false
    }

    fun displayLightStatus() {
        if (isOn == true)
            println("燈亮著。")
        else
            println("燈熄滅了。")
    }
}

fun main(args: Array<String>) {
    val lamp = Lamp()
    lamp.displayLightStatus()
}

運(yùn)行該程序時(shí),輸出為:

燈熄滅了。

本文只是Kotlin中面向?qū)ο缶幊痰幕A(chǔ)知識。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清