Sha*_*lam 16 oop constructor initialization superclass kotlin
最近开始与Kotlin
根据Kotlin文档,可以有一个主构造函数和一个或多个辅助构造函数.
由于类test没有主构造函数.
这很好用:
open class test {
}
class test2 : test() {
}
Run Code Online (Sandbox Code Playgroud)
这是我遇到的另一个困难,当我定义一个辅助构造函数时,IDE会显示另一个错误
但是在之前的工作示例中,我确实初始化了它,但它工作正常.我弄错了什么?
hot*_*key 33
您会收到此错误,因为即使您没有在基类中定义主构造函数或辅助构造函数,仍然会为该类生成默认的无参数构造函数.派生类的构造函数应该总是调用一些超级构造函数,在你的情况下只有默认构造函数(这是你可以调用的构造函数,就像test()创建类的对象一样).编译器和IDE强制您这样做.
超级构造函数规则在某种程度上使问题复杂化.
如果在派生类中定义辅助构造函数而不定义主构造函数(类声明附近没有括号),则辅助构造函数本身应调用超级构造函数,并且不应在类声明中指定超级构造函数参数:
class test2 : test { // no arguments for `test` here
constructor(a: Int) : super() { /* ... */ }
}Run Code Online (Sandbox Code Playgroud)
另一个选项是定义主构造函数并从辅助构造函数中调用它:
class test2() : test() {
constructor(a: Int) : this() { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)