Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
Управление доступом к членам класса в Java осуществляется с помощью трех модификаторов доступа (называемых также спецификаторами): public, private и protected. Если модификатор не указан, то принимается тип доступа по умолчанию. В этой главе будут рассмотрены модификаторы public и private. Модификатор protected непосредственно связан с наследованием, и поэтому он будет обсуждаться в главе 8.
Когда член класса обозначается модификатором public, он становится доступным из любого другого кода в программе, включая и методы, определенные в других классах. Когда же член класса обозначается модификатором private, он может быть доступен только другим членам этого класса. Следовательно, методы из других классов не имеют доступа к закрытому члену данного класса.
Если все классы в программе относятся к одному пакету, то отсутствие модификатора доступа равнозначно указанию модификатора public по умолчанию. Пакет представляет собой группу классов, предназначенных как для организации классов, так и для управления доступом. Рассмотрение пакетов откладывается до главы 8, а для примеров программ, представленных в этой и предыдущих главах, тип доступа по умолчанию не отличается от public.
Модификатор доступа указывается перед остальной частью описания типа отдельного члена класса. Это означает, что именно с него должен начинаться оператор объявления члена класса. Ниже приведены соответствующие примеры.
public String errMsg;
private accountBalance bal;
private boolean isError(byte status) { // ...
Для того чтобы стал понятнее эффект от применения модификаторов доступа
public и private, рассмотрим следующий пример программы:
// Открытый и закрытый доступ к членам класса,
class MyClass {
private int alpha; // закрытый доступ
public int beta; // открытый доступ
int gamma; // тип доступа по умолчанию (по существу, открытый)
/* Методы доступа к переменной alpha. Члены класса могут
обращаться к закрытым членам того же класса.
*/
void setAlpha(int а) {
alpha = а;
}
int getAlpha() {
return alpha;
}
}
class AccessDemo {
public static void main(String args[]) {
MyClass ob = new MyClass();
/* Доступ к переменной alpha возможен только с помощью
специально предназначенных для этой цели методов. */
ob.setAlpha(-99);
System.out.println("ob.alpha is " + ob.getAlpha());
// Обратиться к переменной alpha так, как показано ниже, нельзя.
// ob.alpha =10; // Ошибка! alpha - закрытая переменная!
// Следующие обращения вполне допустимы, так как
// переменные beta и gamma являются открытыми,
ob.beta = 88;
ob.gamma = 99;
}
}
Нетрудно заметить, что в классе MyClass переменная alpha определена как private, переменная beta — как public, а перед переменной gamma модификатор доступа отсутствует, т.е. в данном примере она ведет себя как открытый член класса, которому по умолчанию присваивается модификатор доступа public. Переменная alpha закрыта, и поэтому к ней невозможно обратиться за пределами ее класса. Следовательно, в классе AccessDemo нельзя пользоваться переменной alpha непосредственно. Доступ к ней организуется с помощью открытых методов доступа setAlpha () и getAlpha (), определенных в одном с ней классе. Если удалить комментарии в начале следующей строки кода, то скомпилировать рассматриваемую здесь программу не удастся:
// ob.alpha = 10; // Ошибка! alpha - закрытая переменная!
Компилятор выдаст сообщение об ошибке, связанной с нарушением правил доступа. Несмотря на то что переменная alpha недоступна для кода за пределами класса MyClass, пользоваться ею можно с помощью открытых методов доступа setAlpha () и getAlpha ().
Таким образом, закрытые переменные могут быть свободно использованы другими