Constructor en Kotlin

Recientemente comenzó con Kotlin

De acuerdo con los documentos de Kotlin, puede haber un constructor primario y uno o más constructores secundarios.

No entiendo por qué veo este error enter image description here

Dado que la test class no tiene constructor primario.

Esto funciona bien:

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

Y aquí hay otra dificultad que he enfrentado, cuando defino un constructor secundario, el IDE muestra otro error que dice

La initialization de supertipo es imposible sin un constructor primario enter image description here

Pero en el ejemplo de trabajo anterior, lo inicialicé, pero funcionó bien. ¿Qué me equivoqué?

Obtiene este error porque, incluso si no define un constructor primario o secundario en una class base, todavía hay un constructor pnetworkingeterminado sin argumento generado para esa class. El constructor de una class derivada siempre debe llamar a algunos de los superconstructores, y en su caso solo existe el pnetworkingeterminado (este es el constructor al que puede llamar como test() para crear un object de la class). El comstackdor y el IDE te obligan a hacer eso.


Las reglas de súper constructores complican la cuestión hasta cierto punto.

Si define un constructor secundario en la class derivada sin definir el constructor primario (sin paréntesis cerca de la statement de class), entonces el propio constructor secundario debería llamar al superconstructor, y no deberían especificarse arguments de superconstructor en la statement de class:

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

Otra opción es definir el constructor primario y llamarlo desde el secundario:

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