Kotlin的构造函数

最近开始与Kotlin

根据Kotlin文档,可以有一个主要构造函数和一个或多个次要构造函数。

我不明白为什么我看到这个错误 在这里输入图像描述

由于类test没有主构造函数。

这工作正常:

 open class test { } class test2 : test() { } 

而当我定义一个二级构造函数时,IDE又显示了另一个错误

如果没有主构造函数,超类型初始化是不可能的 在这里输入图像描述

但在前面的工作示例中,我已经初始化它,但它工作正常。 我错了什么?

你会得到这个错误,因为即使你没有在一个基类中定义一个主要或次要的构造函数,仍然会为这个类生成一个默认的无参数构造函数。 派生类的构造函数应该总是调用一些超级构造函数,在你的情况下只有默认的构造函数(这是你可以调用的构造函数,像test()来创建类的对象)。 编译器和IDE迫使你这样做。


超级构造规则在一定程度上使问题复杂化。

如果您在派生类中定义了一个没有定义主构造函数(在类声明附近没有括号)的辅助构造函数,那么辅助构造函数本身应该调用超级构造函数,并且不应该在类声明中指定超级构造函数参数:

 class test2 : test { // no arguments for `test` here constructor(a: Int) : super() { /* ... */ } } 

另一种选择是定义主构造函数,并从第二个构造函数中调用它:

 class test2() : test() { constructor(a: Int) : this() { /* ... */ } }