Java как центр архипелага - страница 6

стр.

шется на языке C).

            4.1.1.2. Наследование

Модель наследования в языке Java существенно отличается от  мо-

дели  C++.  Во-первых,  в Java нет множественного наследования.

Во-вторых, в языке предусмотрены средства для запрета  дальней-

шего  наследования  (ключевое  слово  final  перед определением

класса). В-третьих, в языке Java присутствует новое по  отноше-

нию к C++ понятие интерфейса.

Интерфейс представляет собой набор описаний методов. Пример:

public interface Verbose {

  public void drawOn (Graphics g);

  public void printOn (OutputStream os);

}

public class Star extends Polygon implements Verbose {

  public void drawOn (Graphics g) {

  // Конкретная реализация отрисовки

  }

  public void printOn (OutputStream os) {

  // Конкретная реализация печати

  }

}

public class Text extends StringBuffer implements Verbose {

  public void drawOn (Graphics g) {

  // Конкретная реализация отрисовки

  }

  public void printOn (OutputStream os) {

  // Конкретная реализация печати

  }

}

public class Blackboard extends Canvas {

  public void drawVerbose (Verbose d) {

    Graphics g = getGraphics ();

    d.drawOn (g);

  }

}

Интерфейс Verbose содержит два метода. Первый предназначен  для

рисования  в  графическом  контексте, второй - для распечатки в

выходной поток.

Класс   Star   предствляет   собой   подкласс   многоугольников

(Polygon).  Помимо  прочего,  мы  хотим  рисовать об®екты этого

класса на доске (Blackboard) и выводить их описание в файл.

Для об®ектов класса Text мы хотим иметь  возможность  начертать

текст на доске и выводить его в файл.

Класс Blackboard - наследник класса Canvas, специально предназ-

наченного  для  рисования.  Как  мы видим, этот класс с помощью

единственного метода справляется с рисованием об®ектов, не име-

ющих общего предка (кроме класса Object).

Таким образом, с помощью интерфейсов можно  компенсировать  от-

сутствие  множественного наследования. В контексте наследования

интерфейс можно рассматривать как абстрактный класс, не  содер-

жащий данных.

            4.1.1.3. Жизненный цикл об®екта

Об®екты создаются с помощью оператора new. Инициализация об®ек-

та  производится  с  помощью соответствующего конструктора. Эти

операции разделить нельзя - за new следует конструктор. Пример.

Point myPoint = new Point ();

Других способов создания об®ектов (кроме  оператора  new)  язык

Java не предоставляет.

Об®ект существует до тех пор, пока на него есть ссылки (то есть

пока  он  прямо или косвенно доступен хотя бы из одной перемен-

ной). В языке отсутствуют  явные  средства  удаления  об®ектов.

После того, как об®ект стал недоступен, он оказывается кандида-

том для утилизации сборщиком мусора.

Об®ект  может  стать недоступным, если хранившей его переменной

присвоено новое значение или если эта переменная перестала быть

доступной (произошел выход из блока). Пример.

  Point p = new Point (100.0, 100.0);

  . . .

  p = new Point (1.0, 1.0);

  // На точку с координатами (100, 100) ссылок больше нет

  {

     String s = new String ("Local string");

     System.out.println (s);

  }

  // На строку "Local string" ссылок больше нет

В момент утилизации об®екта сборщиком мусора будет вызван метод

finalize. Из-за того, что сборщик мусора работает в фоновом ре-

жиме, вызов finalize является асинхронным.

          4.1.2. Примитивные типы данных

В языке Java существует набор встроенных типов данных,  которые

не являются об®ектами. Их не так много.

Представление  чисел  в языке Java фиксировано и, тем самым, не

зависит от аппаратной платформы.

- целые числа:

- - byte - 8 бит,

- - short - 16 бит,

- - int -  32 бита,

- - long - 64 бита.

Все числа со знаком, спецификатор unsigned в языке отсутствует.

- числа с плавающей точкой:

- - float - 32 бита,

- - double - 64 бита.

Представление должно соответствовать стандарту IEEE 754.

- char

Значение типа char есть 16-разрядное число без знака  (диапазон

0-65535).  Кодировка соответствует стандарту Unicode. В резуль-

тате с самого начала закладывается здоровая основа для  решения

проблемы локализации Java-программ.

- boolean

Содержит  значения true и false, которые не могут быть преобра-