Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在这种情况下,我必须在创建构造函数时设置super()?_Kotlin_Super - Fatal编程技术网

Kotlin 在这种情况下,我必须在创建构造函数时设置super()?

Kotlin 在这种情况下,我必须在创建构造函数时设置super()?,kotlin,super,Kotlin,Super,我不明白当我创建一个构造函数时,有时我不得不写这个 constructor(...):super(){} 你有一个例子需要理解吗 考虑类条: open class Foo(val i: Int) class Bar: Foo { constructor(i: Int): super(i) } 因为它没有主构造函数,所以次构造函数需要调用它派生的类的构造函数(即Foo) 如果类没有主构造函数,则每个次构造函数 构造函数必须使用super关键字初始化基类型, 或者委托给另一个这样做的构

我不明白当我创建一个构造函数时,有时我不得不写这个

constructor(...):super(){}

你有一个例子需要理解吗

考虑类

open class Foo(val i: Int)

class Bar: Foo {
    constructor(i: Int): super(i)
}
因为它没有主构造函数,所以次构造函数需要调用它派生的类的构造函数(即
Foo

如果类没有主构造函数,则每个次构造函数 构造函数必须使用super关键字初始化基类型, 或者委托给另一个这样做的构造函数。()

在这种特殊情况下,使用主构造函数将是更好的方法:

class Bar(i: Int): Foo(i)
如果派生类具有主构造函数,则基类可以 (并且必须)使用 主构造函数。()


这是因为类有一个带构造函数的超类型。但您可能想研究具有init块的主构造函数,而不是次构造函数。这种情况下,应该调用父类构造函数,所以父类具有必须调用的构造函数。