1

我不明白当抽象类的构造函数在 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)

当您想使用构造函数实例化类时,不允许调用私有构造函数。但是,如果类是抽象的,那么构造函数是私有的还是公有的都没有关系,因为无法实例化该类。

你能澄清一下在抽象类上有一个私有构造函数是什么意思吗?

4

1 回答 1

1

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

open class Operation private constructor (val x: Int, val y: Int) {
    class Add(x: Int, y: Int) : Operation(x, y)
}

在 Kotlin 1.1 之前,密封类的所有子类都必须嵌套,因此可以调用私有构造函数。

我想这部分文档在更改后根本没有调整,现在调用密封类的构造函数保护而不是私有会更有意义。

注意

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

编译

于 2020-07-09T08:19:11.513 回答