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

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);}

}