最近開始使用科特林構造在科特林
根據科特林文檔,可以有一個主構造和一個或多個次級構造函數。
由於類test
不具備主要的構造。
這工作得很好:
open class test {
}
class test2 : test() {
}
這裏是我所面臨的另一個困難,當我定義了一個次級構造的IDE顯示了另一個錯誤說
但在前面的工作示例中,我沒有初始化它,但它工作正常。我錯了什麼?
最近開始使用科特林構造在科特林
根據科特林文檔,可以有一個主構造和一個或多個次級構造函數。
由於類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 –