
- •Конструкторы классов
- •Наследование
- •Модификаторы видимости
- •Перегрузка
- •Полиморфизм
- •Приемы программирования: наследование и полиморфизм
- •Конструктор по умолчанию
- •Вызов конструктора суперкласса
- •Приведение типов
- •Оператор instanceof
- •Анонимные и вложенные классы
- •Модификатор static
- •Модификатор final
- •Абстрактные классы
- •Множественное наследование
- •Описание интерфейса
- •Реализация интерфейса
- •Переменные интерфейсного типа
- •Приемы программирования: пример применения интерфейсов
- •Пакеты и области видимости Пакеты
- •Импортирование пакетов
- •Файловая структура Java-проекта
- •Области видимости классов
- •Области видимости членов класса
- •Области видимости переменных
- •Конфликты имен
- •Ход работы:
- •Задание №1
- •Задание №2
- •Задание №2
- •Задание № 3
- •Контрольные вопросы:
Импортирование пакетов
Полное имя класса состоит из идентификатора, указанного после ключевого слова class и предшествующего ему имени пакета, в котором этот класс находится. Классы ClassA и ClassB, описанные в пакете package1, имеют полные имена package1.ClassA и package1.ClassB.
Классы, находящиеся внутри одного пакета могут пользоваться сокращенными именами друг друга. В одном из методов класса ClassA можно определить переменную класса ClassB, создать объект класса ClassB и вызвать его метод (например, f()) командами:
ClassB varb = new ClassB();
varb.f();
вместо команд:
package1.ClassB varb = new package1.ClassB();
varb.f();
Если классы находятся в разных пакетах, для обращения друг к другу они должны пользоваться полными именами.
Это ограничение можно обойти, если импортировать нужный класс из другого пакета.
Для импортирования класса используется ключевое слово import, после которого указывается его полное имя. Например, можно импортировать класс Vector из пакета java.util:
import java.util.Vector;
Теперь можно пользоваться именем Vector вместо java.util.Vector.
Чтобы импортировать пакет полностью (то есть, ко всем классам пакета можно будет обращаться с помощью сокращенного имени), после имени пакета ставится точка и звездочка. Так, команда
import java.util.*;
импортирует все файлы из пакета java.util. Но таким способом пользоваться не рекомендуется, так как при этом из разных пакетов могут импортироваться файлы с одинаковыми именами.
Все классы, находящиеся в одном пакете, должны иметь разные имена, иначе возникнет ошибка. К классам, которые находятся в разных пакетах, такого требования предъявить, очевидно, невозможно (поскольку пакеты могут разрабатываться совершенно разными людьми).
Поэтому при импортировании нескольких пакетов, в которых содержатся классы с одинаковыми именами, может возникнуть путаница в этих именах. Однако Java справляется с этой проблемой, «отдавая» сокращенное имя первому из импортированных классов. К другому классу можно обратиться с помощью его полного имени.
Если же совпадут и имена пакетов и имена классов, проблема окажется неразрешимой. А поскольку программист может пользоваться множеством пакетов разных разработчиков, такая ситуация вполне вероятна, если разработчики не договорятся. Поэтому существует соглашение об именовании пакетов (особенно тех, которые впоследствии могут распространяться).
Рекомендуется для названия пакета использовать адрес сайта фирмы-разработчика. Адреса сайтов есть практически у всех серьезных разработчиков программ (и, что самое главное, адреса сайтов не могут совпадать). Адрес сайта рекомендуется записывать наоборот. То есть, если адрес – sun.com, то имя пакета должно начинаться с com.sun.
Файловая структура Java-проекта
Итак, Java-проект может состоять из нескольких пакетов. Каждому пакету в файловой структуре операционной системы соответствует одна папка.
В пакете могут содержаться классы и интерфейсы. Они хранятся в файлах с расширением *.java.
В каждом файле с расширением *.java обязательно описывается один класс или интерфейс, название которого совпадает с названием этого файла. Он должен быть объявлен как открытый (перед объявлением класса указывается ключевое слово public). Все остальные классы и интерфейсы из этого файла являются закрытыми – их нельзя использовать за пределами этого пакета (ни с помощью длинного, ни с помощью короткого имени). Поэтому с классом Dog, который мы разрабатывали на прошлой лабораторной работе, можно работать исключительно в пределах его пакета.
Все классы и интерфейсы, которые впоследствии предполагается использовать в других пакетах, должны быть объявлены открытыми (а значит, находиться в отдельных файлах).
Файл с расширением *.java – это обычный текстовый файл. Его можно открывать и редактировать как с помощью NetBeans, так и в любом другом текстовом редакторе (даже в Блокноте).
Для каждого класса (открытого или закрытого) Java создает файл с расширением *.class. Это двоичный файл, в котором хранятся команды на внутреннем языке Java. Эти файлы недоступны для редактирования.