русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Private


Дата добавления: 2015-06-12; просмотров: 552; Нарушение авторских прав


(none) default protected public

Эта последовательность будет использована далее при изучении де­талей наследования классов.

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

• Пакеты доступны всегда, поэтому у них нет модификаторов досту­па (можно сказать, что все они public, то есть любой существующий в системе пакет может использоваться из любой точки программы).

• Типы (классы и интерфейсы) верхнего уровня объявления. При их объявлении существует всего две возможности: указать мо­дификатор public или не указывать его. Если доступ к типу яв­ляется public, то это означает, что он доступен из любой точки кода. Если же он не public, то уровень доступа назначается по умолчанию: тип доступен только внутри того пакета, где онобъявлен.

• Массив имеет тот же уровень доступа, что и тип, на основе кото­рого он объявлен (естественно, все примитивные типы являются полностью доступными).

• Элементы и конструкторы объектных типов. Обладают всеми че­тырьмя возможными значениями уровня доступа. Все элементы интерфейсов являются public.

Для типов объявления верхнего уровня нет необходимости во всех четырех уровнях доступа. Private-типы образовывали бы закрытую мини-программу, никто не мог бы их использовать. Типы, доступные только для наследников, также не были признаны полезными.

Разграничения доступа сказываются не только на обращении к эле­ментам объектных типов или пакетов (через составное имя или прямое обращение), но также при вызове конструкторов, наследовании, приве­дении типов. Импортировать недоступные типы запрещается.

Проверка уровня доступа проводится компилятором. Обратите вни­мание на следующие примеры:

public class Wheel { private double radius;

public double getRadius() {return radius; } }

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



Рассмотрим следующие два модуля компиляции:

package first;

// Некоторый класс Parentpublic class Parent {}

package first;

// Класс Child наследуется от класса Parent, // но имеет ограничение доступа по умолчанию class Child extends Parent { }

public class Provider {public Parent getValue() { return newChildO;} }

К методу getValue{) класса Provider можно обратиться и из дру­гого пакета, не только из пакета first, поскольку метод объявлен как public. Данный метод возвращает экземпляр класса Child, который не­доступен из других пакетов. Однако следующий вызов является корректным:

package second;

import first.*;

public class Test {public static void main(String s[]) { Provider pr = new Provider{); Parent p = pr.getValueO;System.out.println(p.getClass{).getName{)); // (Child)p - приведет к ошибке компиляции!} }

Результатом будет: first. Child

То есть на самом деле в классе Test работа идет с экземпляром недо­ступного класса Child, что возможно, поскольку обращение к нему делается через открытый класс Parent. Попытка же выполнить явное приведение вы­зовет ошибку. Да, тип объекта "угадан" верно, но доступ к закрытому типу всегда запрещен.

Следующий пример:

public class Point { private int x, y;

public boolean equals(Object o) { if {o instanceof Point) { Point p = (Point)o; return p.x==x && p.y==y;} return false;} }

В этом примере объявляется класс Point с двумя полями, описы­вающими координаты точки. Обратите внимание, что поля полностью закрыты - private. Далее попытаемся переопределить стандартный метод equalsO таким образом, чтобы для аргументов, являющихся эк­земплярами класса Point, или его наследников (логика работы опера­тора intsanceof), в случае равенства координат возвращалось истин­ное значение. Обратите внимание на строку, где делается сравнение Координат,— для этого приходится обращаться к private-полям друго­го объекта!

Тем не менее, такое действие корректно, поскольку private допускает обращения из любой точки класса, независимо от того, к какому именно объекту оно производится.

Другие примеры разграничения доступа в Java будут рассматривать­ся по ходу курса.



<== предыдущая лекция | следующая лекция ==>
Разграничение доступа в Java | Заголовок класса


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.558 сек.