#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 LinkedListextends AbstractSequentialList implements List , Deque , Cloneable, java.io.Serializable { private static class Node { ... } }
Комментариев нет:
Отправить комментарий