- •18. Введение в Java. Базовые термины Java. Оформление программы на Java. Типы данных языка Java
- •19. Java. Операторы и массивы
- •20. Особенности реализации ооп в Java (Абстракция, Введение в классы, Методы класса, Конструкторы, Сборка «мусора
- •22.Управление доступом
- •23. Понятие и использование абстрактных классов
- •24. Перегрузка методов. Перегрузка конструкторов
- •25. Класс Object
- •26. Переопределение методов. Динамическая диспетчеризация методов
- •27. Пакеты в Java (Определение пакета, пакет и подпакет, защита и управление доступом, импорт пакетов)
- •28. Использование classpath
- •29. Java. Интерфейсы (Определение, реализация и расширение интерфейсов).
20. Особенности реализации ооп в Java (Абстракция, Введение в классы, Методы класса, Конструкторы, Сборка «мусора
Рассмотрим теперь, как описываются основные базовые строительные блоки языка Java - классы. Схема синтаксиса описания класса такова:
[Модификаторы]
class ИмяКласса
[extends ИмяСуперкласса]
[implements ИменаИнтерфейсов]
{
Данные класса;
Методы;
}
где:
Модификаторы - ключевые слова типа static, public и т.п., модифицирующие поведение класса по умолчанию;
ИмяКласса - имя, которое вы присваиваете классу;
ИмяСуперкласса - имя класса, от которого наследуется ваш класс;
ИменаИнтерфейсов - имена интерфейсов, которые реализуются данным классом (об этом в следующем занятии).
Типичный пример класса мы уже приводили ранее. Это класс аплета, выводящего строку на экран.
Схема описания методов класса сродни описанию простых функций в языках C и C++:
[Модификаторы]
ВозвращаемыйТип ИмяМетода
(Список Параметров)
{
[Тело Метода]
}
public - доступы для использования или расширения любым объектом вне зависимости от пакета. Public классы должны храниться в файлах с именем: <имя_класса>.java. Для остальных классов такое соответствие рекомендуемое.
friendly - модификатор класса по умолчанию (если модификатор не определен явно для класса). Такой класс доступен (public) только для объектов находящихся в том же самом пакете, вне пакета, он выступает как private.
final - класс не может иметь подклассов. Обычно такие классы разрабатываются и используются для организации определенного стандарта реализации.
abstract - класс, в котором объявлен хотя бы один абстрактный метод. Для таких классов нельзя создавать объекты. Такие классы используются для производных классов, организации стандартизированных в определенном смысле интерфейсов и т.п.
Пример объявления:
abstract class Actor {
abstract void act(); }
Множественное наследование в java отсутствует.
Конструкторы . Как и в С++ особое место в JAVA, занимает конструктор. Он предназначен для задания некоторых стандартных значений для переменных-членов класса. Конструктор - это тот же метод класса, обладающий некоторыми особенностями:
конструктор всегда называется так же, как и класс (т. е. если класс, скажем, называется worker, то и контруктор будет называться worker).
конструктор в отличие от других методов вызывается сам в момент создания экземпляра класса.
конструктор не возвращает никакого значения. Это значит, что если перед любым другим методом мы пишем тип возвращаемого значения (int, float и т. п.), то перед конструктором ничего писать не надо (void тоже писать не надо).
Методом, похожим на метод деструктор С++, яаляется finalize ( );. Этот метод объявлен с модификатором доступа protected в классе java.leng.object и следовательно наследуется (присутствует) во всех классах. Метод вызывается средой, во время сборки мусора средой java, поэтому в него обычно размещают код, который необходимо выполнить в случае, например нехватки памяти, т.к. в этом случае запускается сборка мусора.
21.Основы наследования. Создание многоуровневой иерархии
Ограничения доступа к элементам класса.
Java использует три ключевых спецификатора для установки ограничений доступа к элементам класса: public, private и protected, . Их использование и значение достаточно четко определено.
public означает, что к данному элементу возможен доступ из любого места программы;
private доступ может получить только член этого же класса;
protected доступ может получить член собственного класса и члены производных (наследующих) классов. наследующие классы имеют доступ к protected членам, но не к private членам.
friendly испоьзуется по-умолчанию, когда никакой модификатор не указан. Действует как public внутри собственного пакета и как private вне пакета, т.е. к friendly невозможно получить доступ вне собственного пакета.
Статические переменные и методы объявляются при помощи ключевого слова static. Переменные и методы объявленные, как static, являются разделяемым свойствами всех классов, а не отдельных экземпляров (объектов) классов (т.е. одна копия переменной разделяется всеми экземплярами объектов класса). Поэтому к ним можно обращаться без ссылки на конкретный объект и до создания или без создания каких либо объектов. При этом нестатические методы могут работать как с обычными, так и со статическими переменными.
Методы, объявленные как static, могут работать только с переменным и методами, объявленными как static. Такие методы, можно вызвать, даже если объект не создан. Даже если никогда не будет создаваться объект такого класса, можно вызвать статический метод или получить доступ к статическим данным. В статических методах нельзя ссылаться на this (ссылка на об’ект, который вызвал метод или super - ссылка на супер-об’ект (базовый об’ект). Для инициализации статических переменных можно объявить статический блок, который выполняется один раз при первоначальной загрузке класса.
Пример:
public class My_class
{ static boolean switch=true;
static int a=1; //статические переменные
static int b;
public static void f1(int x) //статический метод
{ switch=!switch;
System.out.println(“x=” + x);
System.out.println(“a =” + a);
}
- - - - - - - - -- - - - -- -- - -- --
static { // статический блок инициализации
b=a*4;
}
public static void main (String args[])
{ f1(25);}
}