Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Реклама :





Данный метод возвращает экземпляр класса Child, который не­доступен из других пакетов. Однако следующий вызов является кор­ректным:

package second;

import first.*;

public class Test {

public static void main(String s[]) { Provider pr = new Provider(); Parent p = pr.getValue();

System.out.println(p.getClass().getName()); // (Child)p - приведет к ошибке компиляции!

}

}

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

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

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

public class Point { private intx, у;

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

}

return false;

}

}

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

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

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

Объявление классов

Рассмотрим базовые возможности объявления классов. Объявление класса состоит из заголовка и тела класса.

Заголовок класса

Вначале указываются модификаторы класса. Модификаторы досту­па для класса уже обсуждались. Допустимым является public, либо его от­сутствие — доступ по умолчанию.

Класс может быть объявлен как final. В этом случае не допускается создание наследников такого класса. На своей ветке наследования он яв­ляется последним. Класс String и классы-обертки, например, представля­ют собой final-классы.

После списка модификаторов указывается ключевое слово class, а затем имя класса — корректный Java-идентификатор. Таким образом, кратчайшим объявлением класса может быть такой модуль компиляции: