Обоснование открытого модификатора для переопределенных методов - PullRequest
0 голосов
/ 03 декабря 2018

При переопределении метода в Kotlin базовый класс, определяющий метод и сам метод, должен быть объявлен open.

После переопределения метода производный класс равен finalпо умолчанию, в то время как переопределенный метод open по умолчанию.Из справочной документации:

Элемент, помеченный как override, сам по себе открыт, т.е. он может быть переопределен в подклассах.Если вы хотите запретить переопределение, используйте final.

Интересно, почему Kotlin-Team приняла это дизайнерское решение вместо того, чтобы сделать окончательно переопределенный метод, которыйзначение по умолчанию для производного класса и каждого не переопределенного метода.Мне не удалось найти подсказки при поиске в Интернете?

У кого-нибудь есть ссылка на обоснование этого дизайнерского решения или он может мотивировать его?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Можно утверждать, что эти свойства на самом деле коррелируют.Если класс явно помечен как open, все свойства и методы, которые были определены как open, обрабатываются одинаково во всех подклассах.Если подкласс не открыт, методы не могут быть переопределены независимо от их собственных модификаторов.

Как вы могли заметить, все модификаторы исходного определения наследуются.Таким образом, вам не нужно дублировать эту информацию, только если вы хотите изменить подпись, вам придется определить ее явно.

0 голосов
/ 03 декабря 2018

Это гораздо более практично.Если метод открыт, это означает, что он предназначен для переопределения, и такие методы обычно переопределяются несколько раз в иерархии классов.И пометить производный класс как open гораздо проще, чем повторять модификатор open для всех переопределенных методов.

...