Kotlin的构造函数

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)