Что происходит, когда конструктор абстрактного класса является закрытым в kotlin? - PullRequest
1 голос
/ 09 июля 2020

Я не понимаю, что происходит, когда конструктор абстрактного класса является закрытым в 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)

Закрытые конструкторы не могут быть вызваны, когда вы хотите создать экземпляр класса с помощью конструктора. Однако, если класс абстрактный, не имеет значения, является ли конструктор частным или публикуемым c, потому что класс не может быть создан.

Не могли бы вы пояснить мне, что подразумевает наличие частного конструктора в абстрактном классе ?

1 Ответ

1 голос
/ 09 июля 2020

Для не- sealed абстрактного класса частный конструктор может вызываться только другими конструкторами или вложенными подклассами, как в

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

И до Kotlin 1.1 все подклассы Запечатанный класс должен был быть вложенным, и поэтому мог вызывать частный конструктор.

Я предполагаю, что часть документации просто не была скорректирована после изменения, теперь было бы разумнее вызывать конструктор запечатанного класса protected вместо private.

Обратите внимание, что

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

не не компилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...