Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-1 оопип часть 4.doc
Скачиваний:
29
Добавлен:
01.04.2014
Размер:
112.64 Кб
Скачать

22.Управление доступом

Способ доступа к члену класса определяется спецификатором доступа, который изменяет его объявление. В Java определен обширный набор спецификаторов доступа. Некоторые аспекты управления доступом связаны главным образом с наследованием и пакетами. (Пакет — это, по сути, группирование классов.) Эти составляющие механизма управления доступом Java будут рассмотрены в последующих разделах. А пока начнем с рассмотрения применения управления доступа к отдельному классу. Когда основы управления доступом станут понятными, освоение других аспектов не представит особой сложности.

Спецификаторами доступа Java являются public (общедоступный), private (приватный) и protected (защищенный). Java определяет также уровень доступа, предоставляемый по умолчанию. Спецификатор protected применяется только при использовании наследования. Остальные спецификаторы доступа описаны далее в этой главе.

Начнем с определения спецификаторов public и private. Когда член класса изменяется спецификатором доступа public, он становится доступным для любого другого кода. Когда член класса указан как private, он доступен только другим членам этого же класса. Теперь вам должно быть понятно, почему методу main () всегда предшествует спецификатор public. Этот метод вызывается кодом, расположенным вне данной программы — т.е. системой времени выполнения Java. При отсутствии спецификатора доступа по умолчанию член класса считается общедоступным внутри своего собственного пакета, но недоступным для кода, расположенного вне этого пакета. (Пакеты рассматриваются в следующей главе.)

В уже разработанных нами классах все члены класса использовали режим доступа, определенный по умолчанию, который, по сути, является общедоступным. Однако, как правило, это не будет соответствовать реальным требованиям. Обычно будет требоваться ограничить доступ к членам данных класса — предлагая доступ только через методы. Кроме того, в ряде случаев придется определять приватные методы класса.

Спецификатор доступа предшествует остальной спецификации типа члена. То есть оператор объявления члена должен начинаться со спецификатора доступа. Например:

public int i;

private double j ;

private int myMethod(int a, char, b) {

//...

}

23. Понятие и использование абстрактных классов

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

Пример объявления:

abstract class Actor {

abstract void act(); }

часто приводимый пример - программа рисования геометрических фигур. Есть некоторая программа, задача которой состоит в рисовании точки, круга и квадрата. На ее примере мы и рассмотрим, как создавать абстрактные классы Java. Для начала создадим абстрактный класс Shape - предок всех фигур. Для каждой фигуры потребуются одинаковые данные: цвет (Color) и начальная точка (StartPoint). Чтобы нарисовать фигуру, необходимо создать метод Draw. Как вы, наверное, уже поняли, метод Draw абстрактного класса Shape будет пустым. Непосредственной его реализацией займется класс каждой фигуры. Для объекта класса "Точка" (Point) нужно нарисовать точку, для объекта класса "Круг" (Circle) - круг, а для объекта класса "Квадрат" (Square) - квадрат.

На языке Java абстрактный класс Shape будет описан следующим образом:

// Абстрактный класс "Фигура"

abstract public class Shape

{

// Цвет фигуры

int Color;

// Начальная точка фигуры

Coordinates StartPoint;

// Нарисовать фигуру

abstract public void Draw();

}

Обратите внимание на модификатор abstract в описании класса Shape и его метода Draw. Этим модификатором необходимо отмечать все абстрактные методы и классы. На тип Coordinates не обращайте внимания. Он взят лишь для примера. Предполагается, что где-то ранее он был описан как тип для задания координат x и y фигуры.