Java как центр архипелага | страница 7
понятия класса.
4.1.1.1. Классы
Понятие класса в языках Java и C++ очень близки. Класс является
шаблоном для создания об®ектов; он может содержать данные и ме-
тоды. Приведем пример класса, описывающего точки в двумерном
пространстве (здесь и далее номера строк используются для пос-
ледующих пояснений и не являются частью Java-программ).
1 class Point extends Object {
2 private double x;
3 private double y;
4 Point (double x, double y) {
5 this.x = x;
6 this.y = y;
7 }
8 Point () {
9 this (0.0, 0.0);
10 }
11 public void setX (double x) {
12 this.x = x;
13 }
14 public void setY (double y) {
15 this.y = y;
16 }
. . .
17 }
В языке Java нельзя отрывать определение метода (функции) от
описания заголовка. Синтаксическая конструкция class полностью
включает в себя всю информацию о классе. В частности, реализа-
ции методов обязаны содержаться внутри этой конструкции.
Для обозначения наследования используется ключевое слово
extends (строка 1). Класс Object - это корень дерева наследова-
ния. В Java не бывает классов-"сирот": у всех классов, кроме
Object, есть предшественник. Подробнее наследование и предопре-
деленные классы будут рассмотрены далее.
Режимы доступа к элементам класса (private, protected, public)
те же, что и в C++, за одним важным исключением. Если режим
доступа опущен, предполагается, что соответствующий элемент
доступен в пределах пакета (см. далее).
В строке 9 приведен пример явного вызова одного конструктора из
другого.
Прочие приведенные выше строки не нуждаются в пояснениях кроме
одной - отсутствующей. В языке Java не бывает деструкторов.
Причина в том, что управление памятью автоматизировано (в фоно-
вом режиме работает сборщик мусора). Для высвобождения прочих
ресурсов, ассоциированных с об®ектом, служит специальный метод
finalize. Этот метод вызывается сборщиком мусора в момент ути-
лизации памяти, занимавшейся об®ектом.
Ключевое слово this (см., например, строки 5 и 9) используется
для ссылки на самого себя. Аналогичную роль по отношению к ро-
дительскому классу играет слово super:
1 class ThreePoint extends Point {
2 protected double z;
3 ThreePoint () {
4 super ();
5 z = 0.0;
6 }
7 ThreePoint (double x, double y, double z) {
8 super (x, y);
9 this.z = z;
10 }
11 }
В строках 4 и 8 вызываются конструкторы родительского класса.