尽管显式编写了另一个构造函数,但是否创建了空构造函数?

Does empty constructor is created although another constructor was explicitly written?

我是 Kotlin 的新手(对 Java 有一些经验)。 在 java 中,如果我们编写至少一个构造函数,那么编译 将不会构建 任何空构造函数。只有当我们没有编写构造函数时,才会构建空构造函数。 我知道在 Kotlin 中,编译器的工作方式与 Java 中的相同。 我用 Kotlin 编写了一个超级 class(名称为 Animal),带有一个带一个参数的构造函数。 另外我为Animal写了一个subclass,subclass调用了Animal的空构造函数。我不明白为什么编译器不通知我这是一个编译错误,因为 Animal class 没有要调用的空构造函数。 我的代码:

    open class Animal (val str:String = "sav")
{
    open var fff:String = ""
    open var image = ""
    open val food =""
    open val habitat =""
    var hunger = 10

     open fun makeNoise()
    {
        println("The animal is making noise")
    }
}

class Hippo ( var strrr:Int = 7) : Animal()
{
    override var image = "hippo.jpg"
    override var food = "grass"
    override val habitat = "water"



    override fun makeNoise()
    {
        println("Grunt! Grunt!")
    }
}

class Hippo ( var strrr:Int = 7) : Animal()> isn't a problem?

documentation所述:

On the JVM, if all of the parameters of the primary constructor have default values, the compiler will generate an additional parameterless constructor which will use the default values.

顺便说一句,此构造函数也将在 Java 中可见。