Программирование на Java



         

Объявление конструкторов - часть 4


/* * Этот класс имеет один конструктор. */ public class One { // Будет создан конструктор по умолчанию // Родительский класс Object имеет // конструктор без параметров. }

/* * Этот класс имеет один конструктор. */ public class Two { // Единственный конструктор класса Two. // Выражение new Two() ошибочно! public Two(int x) { } }

/* * Этот класс имеет два конструктора. */ public class Three extends Two { public Three() { super(1); // выражение super требуется }

public Three(int x) { super(x); // выражение super требуется } }

Если класс имеет более одного конструктора, допускается в первой строке некоторых из них указывать не super, а this – выражение, вызывающее другой конструктор этого же класса.

Рассмотрим следующий пример:

public class Vector { private int vx, vy; protected double length;

public Vector(int x, int y) { super(); vx=x; vy=y; length=Math.sqrt(vx*vx+vy*vy); }

public Vector(int x1, int y1, int x2, int y2) { super(); vx=x2-x1; vy=y2-y1; length=Math.sqrt(vx*vx+vy*vy); } }

Видно, что оба конструктора совершают практически идентичные действия, поэтому можно применить более компактный вид записи:

public class Vector { private int vx, vy; protected double length;

public Vector(int x, int y) { super(); vx=x; vy=y; length=Math.sqrt(vx*vx+vy*vy); }

public Vector(int x1, int y1, int x2, int y2) { this(x2-x1, y2-y1); } }

Большим достоинством такого метода записи является то, что удалось избежать дублирования идентичного кода. Например, если процесс инициализации объектов этого класса удлинится на один шаг (скажем, добавится проверка длины на ноль), то такое изменение надо будет внести только в первый конструктор. Такой подход помогает избежать случайных ошибок, так как исчезает необходимость тиражировать изменения в нескольких местах.

Разумеется, такое обращение к конструкторам своего класса не должно приводить к зацикливаниям, иначе будет выдана ошибка компиляции. Цепочка this должна в итоге приводить к super, который должен присутствовать (явно или неявно) хотя бы в одном из конструкторов. После того, как отработают конструкторы всех родительских классов, будет продолжено выполнение каждого конструктора, вовлеченного в процесс создания объекта.




Содержание  Назад  Вперед