Kotlin 資料類繼承:擴充套件資料類

Kailash Vaviya 2023年1月30日 2022年5月11日
  1. 在 Kotlin 中使用 data 關鍵字定義類
  2. 在 Kotlin 中宣告 Data Class 的要求
  3. Kotlin 中的 Data Class 示例
  4. 在 Kotlin 中擴充套件 Data Class
  5. 在 Kotlin 中使用 Abstract Class 擴充套件資料類
  6. 在 Kotlin 中使用 Interface 擴充套件資料類
  7. 在 Kotlin 中使用 Open Classes 擴充套件資料類
Kotlin 資料類繼承:擴充套件資料類

Kotlin 中的 data class 是儲存物件資料的類。本教程將展示如何擴充套件 data class 以利用 Kotlin 中的繼承概念。

在 Kotlin 中使用 data 關鍵字定義類

語法:

data class Tutorials (var name: String, val year: Int)

在 Kotlin 中宣告一個 data class 會自動生成諸如 equals()toString()hashcode() 之類的函式。

在 Kotlin 中宣告 Data Class 的要求

  • 主建構函式中應該有一個或多個引數。
  • 引數應初始化為 varval
  • 我們不能將類宣告為 abstractopensealedinner

Kotlin 中的 Data Class 示例

使用 main 函式在 data class 中宣告變數屬性。

data class Tutorial(val tutorial_name: String, val year: Int)

fun main(args: Array<String>) {
    val tut = Tutorial("Kotlin", 2022)
    println("Tutorial Name = ${tut.tutorial_name}")
    println("Year = ${tut.year}")
}

輸出:

Tutorial Name = Kotlin
Year = 2022

在 Kotlin 中擴充套件 Data Class

資料類是 Java 中 POJO 的替代品。因此,很自然地認為它們將允許 Java 和 Kotlin 中的繼承。

Kotlin 中資料類的繼承不能很好地執行。因此,建議不要通過在 Kotlin 中擴充套件資料類來使用繼承。

但是我們可以使用抽象類介面

在 Kotlin 中使用 Abstract Class 擴充套件資料類

抽象類可以在父類中將所有引數宣告為抽象,然後在子類中覆蓋它們。

fun main(args: Array<String>) {
    abstract class Tutorial {
        abstract var year: Int
        abstract var name: String
    }

    data class Book (
        override var year: Int = 2022,
        override var name: String = "Kotlin Tutorials",
        var isbn: String
    ) : Tutorial()
}

上面的程式碼不會丟擲任何錯誤,因為它擴充套件了 data class。它將建立一個相應的類並使資料類能夠從它擴充套件。

在 Kotlin 中使用 Interface 擴充套件資料類

我們還可以在介面的幫助下擴充套件 Kotlin 中的資料類。

interface Base_Interface {
    val item:String
}

interface Derived_Interface : Base_Interface {
    val derived_item:String
}

fun main(args: Array<String>) {
    
    data class B(override val item:String) : Base_Interface

    data class D(override val derived_item:String,
                 private val b:Base_Interface) :  Derived_Interface, Base_Interface by b
        val b = B("Hello ")
        val d = D("World!", b)

    print(d.item) //from the base class
    print(d.derived_item) //from the derived class
}

在 Kotlin 中使用 Open Classes 擴充套件資料類

擴充套件 data class 的另一種方法是將所有父類屬性宣告為 open

然後我們可以使用相同的覆蓋方法來覆蓋子類中的屬性並擴充套件資料類。

fun main(args: Array<String>) {
    open class ParentClass {
        var var1 = false
        var var2: String? = null
    }

    data class ChildClass(
        var var3: Long
    ) : ParentClass()
}
Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn