最近Kotlinで始めた
Kotlinのドキュメントによると、1つのプライマリコンストラクターと1つ以上のセカンダリコンストラクターが存在する可能性があります。
クラス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() { /* ... */ }
}