class - 这是在 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)
}
解决方案
是的,这是正确的语法。您正在提供必要的参数!
你的Item
类有一个主构造函数,它接受两个参数:name
和price
. 而且,正如您所了解的,由于这是唯一的构造函数,这意味着无论何时构造实例Item
或任何子类,都必须为这两个参数提供值。
但是你提供了这些值——在一种情况下,在另一种情况下"Noodles"
——直接在你调用超类构造函数的地方。10
"Vegetables"
5
在实践中,更常见的是子类要求它们以相同的方式提供给它,然后传递给超类,例如:
class Noodles(val name: String, val price: Int) : Item(name, price)
但是像你所做的那样直接对它们进行硬编码并没有错——有时这是一个好方法。只要Item
'sname
并以某种方式price
设置,它应该都可以工作!
推荐阅读
- swift - 闭包的弱变量之类的东西
- javascript - 状态更改后立即在 React 中获取最新的 Redux 状态
- reactjs - 创建反应应用程序 - ES6 和 passport.js
- elasticsearch - ElasticSearch 6 中的字段名称规则?
- c# - 重定向和 AzureblobTraceListener 过多
- php - Nginx FastCGI 缓存与 laravel 空白页
- javascript - React - 让 XLSX 进入状态?
- c++ - gdb 找不到当前函数的边界
- android - 当用户收到短信时创建通知
- .net - 使用 Quartz.Net 在 2 节点集群中的首选节点上安排特定作业