Kotlin 抽象類(Abstract)

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

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

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

abstract class Person {
    
    var age: Int = 40

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

    abstract fun displayJob(description: String)
}

這里,

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

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

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

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

示例:Kotlin抽象類和方法

abstract class Person(name: String) {

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

    fun displaySSN(ssn: Int) {
        println("我的社保號是 $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ù)學老師。")
    jack.displaySSN(23123)
}

運行該程序時,輸出為:

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

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

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

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

相關知識: Kotlin 接口

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

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

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