- •Интернет технологии
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •2. Перечень тем лабораторных занятий, их содержание и объем в часах
- •3.Индивидуальные практические работы, их характеристики
- •Теоретический раздел Лекции
- •1. Общая характеристика языкаJava
- •1.1 Что такоеJava?
- •1.2 ВыполнениеJava-программы
- •1.3 Что такоеJdk?
- •1.4 Установка и использованиеJdk
- •2. СинтаксисJava.
- •2.1 Первая программа наJava
- •2.2 Комментарии
- •2.3 Константы
- •2.4 Имена
- •2.5 Примитивные типы и операции над ними.
- •2.6 Выражения
- •2.7 Операторы
- •2.7 Массивы
- •3. Объектно-ориентированное программирование в Java
- •3.1 Парадигмы программирования
- •3.2 Принципы объектно-ориентированного программирования
- •3.3 Как описать класс и подкласс
- •3.4 Абстрактные методы и классы
- •3.5 Окончательные члены и классы
- •3.6 Класс Object
- •3.7 Конструкторы класса
- •3.7 Операция new
- •3.8 Статические члены класса
- •3.9 Метод main()
- •4. Пакеты и интерфейсы
- •4.1 Пакет и подпакет
- •4.2 Права доступа к членам класса
- •4.3 Размещение пакетов по файлам
- •4.4 Импорт классов и пакетов
- •4.5 Интерфейсы
- •5. Классы-оболочки
- •5.1 Числовые классы
- •5.2 Класс Boolean
- •5.3 Класс Character
- •5.4 Класс Class
- •6. Работа со строками
- •6.1 Класс String
- •6.2 Манипуляции строками
- •6.3 Класс StringBuffer
- •6.4 Синтаксический разбор строки
- •7. Классы-коллекции
- •7.1Класс Vector
- •7.2 Класс Stack.
- •7.3 Класс Hashtable
- •7.4 Класс Properties
- •8. Система ввода/вывода в Java
- •8.1 Класс File
- •8.2 Ввод и вывод
- •9. Потоки выполнения
- •9.1 КлассThread
- •9.2 Синхронизация потоков выполнения
- •9.3 Приоритеты подпроцессов
- •9.4 Подпроцессы-демоны
- •9.5 Группы подпроцессов
- •10. Сетевые средстваJava
- •10.1 Общие принципы взаимодействия по сети
- •10.2 Работа в www
- •10.3 Работа по протоколу tcp
- •10.4 Работа по протоколу udp
- •11. Работа с бд черезJdbc
- •11.1 Связь с базами данных через jdbc
- •12.1 Удаленный интерфейс
- •12.2 Регистрация
- •12.3 Создание якорей и скелетов
- •12.4 Использование удаленных объектов
- •13. СозданиеXml-документа для описания некоторых данных
- •Глава 1. Обработка документов xml 77
- •Практический раздел
4.2 Права доступа к членам класса
Пришло время подробно разобрать различные ограничения доступа к полям и методам класса.
Рассмотрим большой пример. Пусть имеется пять классов, размещенных в двух пакетах, как показано на рис. 8.
Рис. 8. Размещение наших классов по пакетам
В файле Base.java описаны три класса: inpi, Base и класс Derivedpi , расширяющий класс вазе. Эти классы размещены в пакете pi. В классе Base определены переменные всех четырех типов доступа, а в методах f() классов inp1 и Derivedp1 сделана попытка доступа ко всем полям класса вазе. Неудачные попытки отмечены комментариями. В комментариях помещены сообщения компилятора. Листинг 11 показывает содержимое этого файла.
Листинг 11. Файл Base.java с описанием пакета p1
class Inp1 {
public void f() {
Base b = new Base();
// b.priv = 1; // "priv has private access in p1.Base"
b.pack = 1;
b.prot = 1;
b.publ = 1;
}
}
public class Base {
private int priv = 0;
int pack = 0;
protected int prot = 0;
public int publ = 0;
}
class Derivedpi extends Base {
public void f(Base a) {
// a.priv = 1; // "priv hds private access in pi.Base"
a.pack = 1;
a.prot = 1;
a.publ = 1;
// priv = 1; // "priv has private access in pi.Base"
pack = 1;
prot = 1;
publ = 1;
}
}
Как видно из листинга 11, в пакете недоступны только закрытые, private , поля другого класса.
В файле Inp2.java описаны два класса: inp2 и класс Derivedp2 , расширяющий класс base . Эти классы находятся в другом пакете р2 . В этих классах тоже сделана попытка обращения к полям класса вазе. Неудачные попытки прокомментированы сообщениями компилятора. Листинг 12 показывает содержимое этого файла.
Напомним, что класс вазе должен быть помечен при своем описании в пакете p1 модификатором public , иначе из пакета р2 не будет видно ни одного его члена.
Листинг 12. Файл Inp2.java с описанием пакета р2
package p2;
import pl.Base;
class Inp2{
public static void main(String[] args){
Base b = new Base();
// b.priv = 1; // "priv has private access in pl.Base"
// b.pack = 1; // "pack is not public in pl.Base;
// cannot be accessed from outside package"
// b.prot = 1; //„"prot has protected access in pi.Base"
b.publ = 1;
}
}
class Derivedp2 extends Base{
public void, f (Base a){
// a.priv = 1; // "priv has private access in. p1.Base"
// a.pack = 1; // "pack, is not public in pi.Base; cannot
//be accessed from outside package"
// a.prot = 1; // "prot has protected access in p1.Base"
a.publ = 1;
// priv = 1; // "priv has private access in pi.Base"
// pack = 1; // "pack is not public in pi.Base; cannot
// be accessed from outside package"
prot = 1;
publ = 1;
super.prot = 1;
}
}
Здесь, в другом пакете, доступ ограничен в большей степени.
Из независимого класса можно обратиться только к открытым, public , полям класса другого пакета. Из подкласса можно обратиться еще и к защищенным, protected , полям, но только унаследованным непосредственно, а не через экземпляр суперкласса.
Все указанное относится не только к полям, но и к методам. Подытожим все сказанное в табл. 4.1.
Таблица 4.1. Права доступа к полям и методам класса
|
Класс |
Пакет |
Пакет и подклассы |
Все классы |
private |
+ |
|
|
|
"package" |
+ |
+ |
|
|
protected |
|
+ |
+ |
* |
public |
+ |
+ |
+ |
+ |
Особенность доступа к protected -полям и методам из чужого пакета отмечена звездочкой.