构造在科特林
问题描述:
最近开始使用科特林构造在科特林
根据科特林文档,可以有一个主构造和一个或多个次级构造函数。
由于类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() { /* ... */ }
}
这是覆盖了科特林文档中的构造? http://kotlinlang.org/docs/reference/classes.html#constructors –