|
Конструкторы
класса
Вы уже обратили внимание на то,
что в операции new, определяющей экземпляры класса, повторяется имя класса со
скобками. Это похоже на обращение к методу, но что за "метод", имя
которого полностью совпадает с именем класса?
Такой "метод" называется
конструктором класса
(class constructor). Его своет образие заключается
не только в имени. Перечислим особенности конструктора.
-
Конструктор имеется в любом классе.
Даже если вы его не написали, компилятор Java сам создаст
конструктор по
умолчанию
(default constructor), который, впрочем, пуст, он не делает
ничего, кроме вызова конструктора суперкласса.
-
Конструктор выполняется автоматически
при создании экземпляра класса, после распределения памяти и обнуления полей,
но до начала использования создаваемого объекта.
-
Конструктор не возвращает никакого
значения. Поэтому в его описании не пишется даже слово
void
,
но можно задать один из трех модификаторов
public
,
protected
или
private
.
-
Конструктор не является методом,
он даже не считается членом класса. Поэтому его нельзя наследовать или переопределить
в подклассе.
-
Тело конструктора может начинаться:
-
с вызова одного из конструкторов
суперкласса, для этого записывается слово
super()
с параметрами в скобках, если они нужны;
-
с вызова другого конструктора
того же класса, для этого записывается слово
this()
с параметрами в скобках, если они нужны.
Если же
super()
в начале конструктора не указан, то вначале выполняется конструктор суперкласса
без аргументов, затем происходит инициализация полей значениями, указанными
при их объявлении, а уж потом то, что записано в конструкторе.
Во всем остальном конструктор можно
считать обычным методом, в нем разрешается записывать любые операторы, даже
оператор
return
, но только пустой, без всякого возвращаемого
значения.
В классе может быть несколько конструкторов.
Поскольку у них одно и то же имя, совпадающее с именем класса, то они должны
отличаться типом и/или количеством параметров.
В наших примерах мы ни разу не рассматривали
конструкторы классов, поэтому при создании экземпляров наших классов вызывался
конструктор класса
object
.
|