亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Kotlin 抽象類(Abstract)

在本文中,您將學(xué)習(xí)抽象類以及如何在Kotlin中實(shí)現(xiàn)抽象類(借助示例)。

與Java一樣,abstract 關(guān)鍵字用于在Kotlin中聲明抽象類。無(wú)法實(shí)例化抽象類(不能創(chuàng)建抽象類的對(duì)象)。但是,您可以從它們中繼承子類。

除非您明確使用 abstract 關(guān)鍵字將其抽象,否則抽象類的成員(屬性和方法)是非抽象的。讓我們舉個(gè)實(shí)例:

abstract class Person {
    
    var age: Int = 40

    fun displaySSN(ssn: Int) {
        println("我的社保號(hào)是: $ssn.")
    }

    abstract fun displayJob(description: String)
}

這里,

  • 創(chuàng)建一個(gè)抽象類 Person 。您不能創(chuàng)建該類的對(duì)象。

  • 該類具有非抽象屬性 age和非抽象方法 displaySSN()。如果您需要在子類中覆蓋這些成員,則應(yīng)使用 open 關(guān)鍵字標(biāo)記它們。

  • 該類具有抽象方法 displayJob()。它沒有任何實(shí)現(xiàn),必須在其子類中重寫。

注意:抽象類總是開放的。 您不需要顯式使用open關(guān)鍵字從它們繼承子類。

示例:Kotlin抽象類和方法

abstract class Person(name: String) {

    init {
        println("我的名字是 $name.")
    }

    fun displaySSN(ssn: Int) {
        println("我的社保號(hào)是 $ssn.")
    }

    abstract fun displayJob(description: String)
}

class Teacher(name: String): Person(name) {

    override fun displayJob(description: String) {
        println(description)
    }
}

fun main(args: Array<String>) {
    val jack = Teacher("Jack Smith")
    jack.displayJob("我是一名數(shù)學(xué)老師。")
    jack.displaySSN(23123)
}

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

我的名字是  Jack Smith.
我是一名數(shù)學(xué)老師。
我的社保號(hào)是 23123.

在這里, Teacher 類派生自抽象類 Person

Teacher 類的對(duì)象 jack 被實(shí)例化。在創(chuàng)建主構(gòu)造函數(shù)時(shí),我們將“ Jack Smith”作為參數(shù)傳遞給它。這將執(zhí)行 Person 類的初始化塊。

然后,使用Jack對(duì)象調(diào)用displayJob()方法。 請(qǐng)注意,displayJob()方法在基類中被聲明為抽象的,并在派生類中被覆蓋。
最后,使用Jack對(duì)象調(diào)用displaySSN()方法。 該方法是非抽象的,在 Person 類中聲明(而不是在 Teacher 類中聲明)。

相關(guān)知識(shí): Kotlin 接口

Kotlin接口類似于抽象類。但是,接口不能存儲(chǔ)狀態(tài),而抽象類可以。

也就是說,接口可能有屬性,但它必須是抽象的或者必須提供訪問器實(shí)現(xiàn)。然而,抽象類的屬性不是必須是抽象的。