Kotlin 資料類繼承:擴充套件資料類
-
在 Kotlin 中使用
data
關鍵字定義類 -
在 Kotlin 中宣告
Data Class
的要求 -
Kotlin 中的
Data Class
示例 -
在 Kotlin 中擴充套件
Data Class
-
在 Kotlin 中使用
Abstract Class
擴充套件資料類 -
在 Kotlin 中使用
Interface
擴充套件資料類 -
在 Kotlin 中使用
Open Classes
擴充套件資料類
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
的要求
主建構函式
中應該有一個或多個引數。- 引數應初始化為
var
或val
。 - 我們不能將類宣告為
abstract
、open
、sealed
或inner
。
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 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