当抽象类的构造函数在kotlin中是私有的时会发生什么?

当抽象类的构造函数在kotlin中是私有的时会发生什么?,kotlin,constructor,abstract-class,private,sealed-class,Kotlin,Constructor,Abstract Class,Private,Sealed Class,我不明白当抽象类的构造函数在Kotlin中是私有的时会发生什么。在本例中,我使用的是一个密封类,默认情况下它有一个私有构造函数。但是,我能够从子类调用私有构造函数 sealed class Operation(val x: Int, val y: Int) class Add(x: Int, y: Int) : Operation(x, y) class Subtract(x: Int, y: Int) : Operation(x, y) class Multiply(x: Int, y: In

我不明白当抽象类的构造函数在Kotlin中是私有的时会发生什么。在本例中,我使用的是一个密封类,默认情况下它有一个私有构造函数。但是,我能够从子类调用私有构造函数

sealed class Operation(val x: Int, val y: Int)
class Add(x: Int, y: Int) : Operation(x, y)
class Subtract(x: Int, y: Int) : Operation(x, y)
class Multiply(x: Int, y: Int) : Operation(x, y)
class Divide(x: Int, y: Int) : Operation(x, y)
如果要使用构造函数实例化类,则不允许调用私有构造函数。但是,如果类是抽象的,那么构造函数是私有的还是公共的并不重要,因为类无法实例化


你能解释一下抽象类上有私有构造函数意味着什么吗?

对于非密封的抽象类,私有构造函数只能由其他构造函数或嵌套子类调用,如

open class Operation private constructor (val x: Int, val y: Int) {
    class Add(x: Int, y: Int) : Operation(x, y)
}
在Kotlin1.1之前,密封类的所有子类都必须嵌套,因此可以调用私有构造函数

我猜文档的一部分在更改后没有进行调整,现在调用密封类的构造函数protected而不是private会更有意义

注意

open class Operation private constructor (val x: Int, val y: Int)
class Add(x: Int, y: Int) : Operation(x, y)
不编译