Java как центр архипелага - [5]

Шрифт
Интервал

средствами, внешними по отношению к Java-системе (например, пи-

шется на языке 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, которые не могут быть преобра-

зованы в другой тип.

В языке Java, разумеется, присутствуют массивы. Эти массивы ти-

пизированы. Декларация

Point myPoints[];

описывает переменную myPoints как массив об®ектов  типа  Point.

Завести массив определенного размера можно с помощью инструкции

вида

myPoints = new Point[10];

Значения  элементов  массива  при  этом устанавливаются равными

специальной величине null.

Размер массива может быть получен во время выполнения  програм-

мы:

howMany = myPoints.length;

Других структурных типов (не являющихся об®ектами) в языке Java

нет, то есть нет структур, об®единений и т.п. Нет в Java и ука-

зателей.

Отметим,  что  строки  символов  являются об®ектами типа String

(текстовые константы)  или  StringBuffer  (изменяемые  строки).

Пример,

String hello = "Hello world!";

          4.1.3. Пакеты

Классы в языке Java об®единяются в пакеты. Все классы, входящие

в  один пакет, являются дружественными по отношению друг к дру-

гу, то есть имеют взаимный доступ к переменным и методам,  если


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.