Котлин Абстрактное защищенное свойство

Если у меня есть следующая иерархия классов:

abstract class Foo<out T : Bar>() { abstract protected val thing: T } class Baz : Foo<BarImpl> { override protected val thing: T = ... } 

Я получаю предупреждение о Baz :: thing, говоря:

Резервный модификатор видимости

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

Вы получите предупреждения стиля проверки IDE в Котлине для таких вещей, как дополнительные полуколоны, которые вам не нужны, дополнительные параметры типового типа, которые уже можно вывести, и многое другое. У вас для избыточного модификатора видимости есть те же строки.

Если вы развернете сообщение об инспекции, вы увидите полный текст:

Эта проверка сообщает о модификаторах видимости, которые соответствуют видимости элемента по умолчанию для элемента (общедоступно для большинства элементов, защищенных для членов, которые переопределяют защищенный элемент).

И вы можете отключить осмотр внутри своей IDE, если вы уже не видите, что посмотреть.

Еще несколько замечаний об этом:

При переопределении метода или члена класса предка вы уже на том же уровне доступа, что и при его объявлении. В заявлении protected указано очевидное (компилятору, который знает, что он protected ).

Если вам нужно, вы можете повторно подтвердить модификатор доступа. И вы можете открыть его больше, изменив его на public . Но вы не можете ограничивать его дальше, например, закрываясь (потому что, если это личное, как вы могли бы переопределить его, эта идея несовместима с override ), которая становится ошибкой компилятора.