Страницы

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

понедельник, 6 января 2020 г.

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

#java #android


Здравствуйте, столкнулся с проблемой следующего рода: есть 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 {
  }

    


Ответы

Ответ 1



Смотрите. В таком виде 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 { ... } }

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

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