Конструктори в Java 1


  • Конструктор може оголошуватися з будь-яким модифікатором доступу, включаючи private (якщо ви оголосите конструктор приватним, то це означає, що об’єкт може бути інстанційовано виключно з коду цього ж класу). Приватні конструктори використовуються якщо потрібно заборонити створення об’єктів класу; якщо ж ви все ж хочете надати зовнішньому коду доступ до об’єкта з приватним конструктором, слід передбачити у ньому статичний метод або змінну, що забезпечить доступ до створеного приватним конструктором екземпляра.
  • Ім’я конструктора повинне збігатися з іменем класу.
  • Для конструктора не вказується тип результату, що він повертає (інакше це буде просто звичайний метод).
  • Дозволяється оголошувати метод, ім’я якого співпадає з іменем класу (для такого методу слід вказати тип результату, який ним повертається) – просто співпадіння імен не робить метод конструктором. Присутність у класі конструктора та методу з однаковими іменами не є проблемою для компілятора Java, та може заплутати неуважного програміста.
  • Якщо у класі не оголошено жодного конструктора, компілятор Java автоматично створить конструктор за замовчуванням.
  • Конструктор за замовчуванням це завжди конструктор без аргументів.
  • Якщо у класі вже оголошено будь-який конструктор, то конструктор за замовчуванням автоматично створено не буде. Його доведеться створювати самому.
  • Першим рядком кожного конструктора є виклик конструктора батьківського класу – super() або перевантаженого конструктора поточного класу – this(); компілятор сам може вставити цей виклик, якщо цього не зробите ви.
  • Якщо ви оголошуєте конструктор і не вказуєте у першому рядку виклику super() або this() – компілятор згенерує виклик конструктора батьківського класу без параметрів і вставить його у перший рядок вашого конструктора автоматично.
  • Виклик батьківського конструктора super() може здійснюватися як без аргументів, так і з переліком аргументів – якщо існує батьківський конструктор під такі аргументи.
  • Конструктор без аргументів не завжди генерується компілятором (ви можете оголосити його самостійно), але компілятор вміє генерувати виключно конструктори без аргументів.
  • Неможливо здійснити виклик методу об’єкта чи звернутися до його поля доки не здійснено виклик батьківського конструктора цього об’єкта. Тобто не можна передати у виклик super() якогось поля поточного об’єкта, що викликає цей super().
  • Тільки статичні поля та методи можуть бути використані при виклику super() або this() у конструкторі (статичні поля і методи не є полями і методами об’єкта, вони належать класу).
  • Абстрактні класи завжди мають конструктор (як мінімум, конструктор за замовчуванням), який викликається при створенні об’єктів класів, що наслідують цей абстрактний клас.
  • При виклику конструктора об’єкта ланцюжком викликаються конструктори всіх його предків (у т.ч. абстрактних) аж до конструктора Object() включно.
  • Інтерфейси не мають конструкторів і не належать до дерева наслідування об’єктів.
  • Єдиний спосіб викликати конструктор без ключового слова new – це викликати його всередині іншого конструктора.

Почитайте ще оце:


Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Думка на тему “Конструктори в Java