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



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


Проиллюстрируем этот алгоритм следующим примером:

public class GraphicElement { private int x, y; // положение на экране

public GraphicElement(int nx, int ny) { super(); // обращение к конструктору // родителя Object System.out.println("GraphicElement"); x=nx; y=ny; } }

public class Square extends GraphicElement { private int side;

public Square(int x, int y, int nside) { super(x, y); System.out.println("Square"); side=nside; } }

public class SmallColorSquare extends Square { private Color color;

public SmallColorSquare(int x, int y, Color c) { super(x, y, 5); System.out.println("SmallColorSquare"); color=c; } }

После выполнения выражения создания объекта на экране появится следующее:

GraphicElement Square SmallColorSquare

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

Напомним, что, во-первых, конструкторы не имеют имени и их нельзя вызвать явно, только через выражение создания объекта. Кроме того, конструкторы не передаются по наследству. То есть, если в родительском классе объявлено пять разных полезных конструкторов и требуется, чтобы класс-наследник имел аналогичный набор, необходимо все их описать заново.

Класс обязательно должен иметь конструктор, иначе невозможно порождать объекты ни от него, ни от его наследников. Поэтому если в классе не объявлен ни один конструктор, компилятор добавляет один по умолчанию. Это public-конструктор без параметров и с телом, описанным парой пустых фигурных скобок. Из этого следует, что такое возможно только для классов, у родителей которых объявлен конструктор без параметров, иначе возникнет ошибка компиляции. Обратите внимание, что если затем в такой класс добавляется конструктор (не важно, с параметрами или без), то конструктор по умолчанию больше не вставляется:




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