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