Как скрыть метод класса в том же пакете - PullRequest
1 голос
/ 08 марта 2020

Итак, у меня есть пакет с именем AB C с классом A, классом B и классом C. Теперь мой основной класс находится за пределами пакета и вызывает метод класса A с именем show (), который является методом publi c stati c. В основном, класс A действует как шлюз для пакета AB C. Теперь у меня есть класс C, расширяющий класс B, и у меня есть абстрактный метод execute () в классе B, который был переопределен в классе C. Теперь модификатор доступа для execute () защищен. Теперь я не могу получить доступ к execute () из main, что мне нужно, но я все равно могу получить к нему доступ из класса A, потому что он находится в том же пакете. Как я могу скрыть execute внутри одного и того же пакета, т.е. как я могу скрыть execute () в классе A, но при этом иметь доступ к нему в классе C?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Единственный способ скрыть execute() от класса A - сделать его private в классе C. Но поскольку execute() является абстрактным методом в классе B, эта комбинация недопустима (private + abstract). Даже если вы сделаете его защищенным, вы не сможете переопределить его и сделать его private в классе B, как в этом примере:

abstract class B 
{
 protected abstract void execute(); 
}

и:

class C
{
 @Override
 private void execute() {} // not working
}

Потому что незаконно назначать более слабые права доступа при переопределении метода.

1 голос
/ 08 марта 2020

К сожалению Java не имеет соответствующих модификаторов видимости, защищенный является расширенным набором приватных пакетов.

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