Страницы

Поиск по вопросам

среда, 13 февраля 2019 г.

Невожможно выбрать модификатор доступа класса

Здравствуйте, столкнулся с проблемой следующего рода: есть public класс. При попытке создать наследника с модификатором отличным от public пишет
"modifier ... not allowed here".
Почитал в интернете нашел, что класс наследник может иметь уровень доступа такой же или "шире" чем родителя. При создании третего класса, который не являеться чьим-либо наследником, пишет
"modifier ... not allowed here"
при private. При модификаторе public понятно (в одном java - файле может быть только один private), protected мне не нужен - наследников не будет. Все классы находятся в одном пекедже и одном файле (программа ведь учебная и небольшая). Проблемы нету только с package модификатором.
Объясните, пожалуйста, что не так.
package Animals;
public class Bird {
public static void main(String[] args) { } }
class Parrot extends Bird { }
private class Cat { }


Ответ

Смотрите. В таком виде private или protected классы Parrot и Cat были бы недоступны никому, даже методу main в классе Bird
Без указания конкретного модификатора классы будут иметь package-видимость, то есть видимы для всех в пределах пакета Animals (кстати, пакеты именуют с маленькой буквы).
Для внутренних (inner) классов задание видимости уже имеет смысл: они могут являться деталями реализации внешнего класса, о которых не нужно знать окружающему миру. Т.е. такой код скомпилируется:
public class Bird { private class Cat { }
public static void main(String[] args) { } }
Этот прием достаточно широко используется в классах, входящих в JDK. Например, список LinkedList не показывает наружу деталь реализации - класс узла списка LinkedList.Node, поэтому объявляет его так:
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable { private static class Node { ... } }

Комментариев нет:

Отправить комментарий