Ну ... у меня тоже было это сомнение (вот почему я искал эту тему). Это может быть хороший вопрос.
Но ...
После второй мысли все становится действительно проще, чем мы думали.
Закрытый для пакета метод, это закрытый для пакета метод.
Кажется глупостью? Но ...
Закрытый для пакета метод, даже если его класс унаследован, но он по-прежнему Закрытый для пакета метод.
Теперь это имеет больше смысла? Для более подробного объяснения:
Закрытый для пакета метод, даже если его класс унаследован от более видимого подкласса, он все еще закрытый для пакета метод.
Если подкласс относится к тому же пакету, эти методы приватного пакета также наследуются, , но они все еще являются приватными пакетами .
Если подкласс относится к другому пакету (здесь нам нужно, чтобы родительский класс был общедоступным, с некоторыми закрытыми для пакета методами), эти закрытые для пакета методы не наследуются (поскольку они не видны в все).
Следует отметить, что причиной этого сомнения может быть то, что закрытый для пакета метод в открытом классе также не виден вне его пакета.
Выше приведено объяснение метода приватности пакетов. И случай public-метода точно такой же.
Когда закрытый класс пакета наследуется общедоступным подклассом (того же самого пакета, это необходимо), его открытые методы наследуются как открытые методы, и, таким образом, они становятся открытыми методами в общедоступном классе.
В примере OP, поскольку foo()
и bar()
оба находятся в классе с закрытым пакетом, их видимость в данный момент ограничена частным с пакетом, пока не будут добавлены дополнительные коды (например, наследование).
Надеюсь, это достаточно ясно (и просто).
P.S. таблица контроля доступа Java