首页 > 解决方案 > 这是在 Kotlin 中继承超类的正确语法吗?

问题描述

这是在 Kotlin 中继承超类的正确语法吗?我研究的那个子类必须包含其超类的参数。但是在这里你可以看到,Noodles 和 Vegetables 类没有参数。为什么?

open class Item(val name: String, val price: Int)

class Noodles : Item("Noodles", 10)

class Vegetables : Item("Vegetables", 5) 

fun main() {
    val noodles = Noodles()
    val vegetables = Vegetables()
    println(noodles)
    println(vegetables)
}

标签: classkotlininheritance

解决方案


是的,这是正确的语法。您正在提供必要的参数!

你的Item类有一个主构造函数,它接受两个参数:nameprice. 而且,正如您所了解的,由于这是唯一的构造函数,这意味着无论何时构造实例Item或任何子类,都必须为这两个参数提供值。

但是你提供了这些值——在一种情况下,在另一种情况下"Noodles"——直接在你调用超类构造函数的地方。10"Vegetables"5

在实践中,更常见的是子类要求它们以相同的方式提供给,然后传递给超类,例如:

class Noodles(val name: String, val price: Int) : Item(name, price)

但是像你所做的那样直接对它们进行硬编码并没有错——有时这是一个好方法。只要Item'sname以某种方式price设置,它应该都可以工作!

像往常一样,语言文档是主要参考资料;它在这里讨论了所有这些。


推荐阅读