И это будет полное квалифицированное имя класса – имя класса вместе с именем его пакета.

Если вы хотите импортировать все классы в пакете, вы можете использовать символ звездочки.

Таким образом, вы сможете получить доступ ко всем публичным полям и методам этих классов.

Полное имя класса – весьма важный момент.

Разделение классов по пакетам служит не только для удобства, но решает еще одну важную задачу – уникальность имен классов.

Наверняка в большом проекте будет участвовать много людей и каждый будет писать свои классы.

И наверняка имена этих классов нередко будут одинаковые.

И скорее всего вы будете подключать сторонние библиотеки и в них будут классы, которые будут называться так же как ваши.

Единственным спасением различать их – это поместить в разные пакеты.

Таким образом, как правило, программа состоит из нескольких пакетов.

И каждый пакет имеет собственное пространство имен для классов и интерфейсов, объявленных в пакете.

И пакеты образуют иерархическую структуру имен.

При этом полные имена классов и интерфейсов, то есть их имена с учетом пакетов, должны быть уникальными.

И для доступа из одного пакета к другим пакетам используется ключевое слово import.

Также пакеты могут быть безымянными.

Классы и интерфейсы безымянного пакета не содержат объявления пакета.

И безымянные пакеты следует использовать только в небольших тестовых программах.

Также в Java можно использовать статический импорт для доступа к статическим методам и полям класса.



Например, в этом выражении, методы pow и sqrt являются статическими, поэтому они должны быть вызваны с указанием имени их класса – Маth.

И это приводит к достаточно громоздкому коду.

Этих неудобств можно избежать, если воспользоваться статическим импортом.

При этом имена методов sqrt и pow становятся видимыми благодаря оператору статического импорта.

Также, с помощью звездочки, можно импортировать все остальные статические члены класса Math, не указывая их по одному.

Каким бы удобным ни был статический импорт, очень важно не злоупотреблять им, чтобы избежать конфликта имен, например, если вы определите в своем классе свой метод pow.

Теперь, когда мы узнали, что классы группируются в пакеты, и мы знаем, что методы и поля класса могут быть публичными и приватными, пора сказать, что методы и поля класса также могут быть защищенными, это ключевое слово protected, и приватными в пакете, это отсутствие всякого ключевого слова.



Публичный член класса виден везде без ограничений.

Защищенный член класса, protected, виден в пределах своего пакета, а также подклассом класса, даже если подкласс принадлежит другому пакету.

Если нет никакого ключевого слова, член класса виден только в пределах своего пакета.

И приватный член класса виден только в пределах своего класса.

Абстрактные классы vs Интерфейсы


Теперь давайте вернемся немного назад и рассмотрим наследование разных объектов.

Предположим у нас есть эта иерархия.



Вверху иерархии у вас есть что-то более общее, например, позвоночные, а затем, когда вы спускаетесь вниз, все становится более конкретным.

Таким образом, в самом низу у вас есть наиболее специфический уровень.

В некоторых деревьях наследования, поскольку все становится более общим, объекты как бы перестают восприниматься как реальные экземпляры.

Как что такое объект рыбы?

Существует много разных видов рыб, и это слишком общее, чтобы действительно существовало в природе.

Поэтому, для представления таких объектов и вводится понятие абстрактный.

Абстрактные методы – это определение метода в суперклассе, но они не имеют реальной реализации.