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