Що таке конструктор у Java?
CONSTRUCTOR - це спеціальний метод, який використовується для ініціалізації новоствореного об’єкта і викликається відразу після виділення пам’яті для об’єкта. Він може використовуватися для ініціалізації об’єктів до бажаних значень або значень за замовчуванням під час створення об’єкта. Кодер не є обов'язковим для написання конструктора для класу.
Якщо для класу не передбачений конструктор, визначений користувачем, компілятор ініціалізує змінні-члени значеннями за замовчуванням.
- для числових типів даних встановлено значення 0
- Типи даних char мають нульовий символ ('\ 0')
- для змінних посилання встановлено значення null
У цьому підручнику ви дізнаєтесь-
- Правила створення конструктора
- Перевантаження конструктора в Java
- Ланцюжок конструктора
Правила створення конструктора Java
- Він має ту саму назву , що і клас
- Він не повинен повертати значення, навіть недійсне
Приклад 1 : Створіть свій перший конструктор на Java
Крок 1) Введіть наступну програму-конструктор у редакторі Java.
class Demo{int value1;int value2;Demo(){value1 = 10;value2 = 20;System.out.println("Inside Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();d1.display();}}
Крок 2) Збережіть, запустіть та скомпілюйте програму-конструктор на Java та спостерігайте за результатами.
Вихід:
Inside ConstructorValue1 === 10Value2 === 20
Перевантаження конструктора в Java
Перевантаження Java Constructor - це техніка, при якій клас може мати будь-яку кількість конструкторів, що відрізняються за списком параметрів. Компілятор диференціює ці конструктори, враховуючи кількість параметрів у списку та їх тип.
Прикладами допустимих конструкторів для класу Account є
Account(int a);Account (int a,int b);Account (String a,int b);
Приклад 2 : Розуміння перевантаження конструктора в Java
Крок 1) Введіть код у редакторі.
class Demo{int value1;int value2;/*Demo(){value1 = 10;value2 = 20;System.out.println("Inside 1st Constructor");}*/Demo(int a){value1 = a;System.out.println("Inside 2nd Constructor");}Demo(int a,int b){value1 = a;value2 = b;System.out.println("Inside 3rd Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();Demo d2 = new Demo(30);Demo d3 = new Demo(30,40);d1.display();d2.display();d3.display();}}
Крок 2) Збережіть, скомпілюйте та запустіть код.
Крок 3) Помилка =?. Спробуйте виправити помилку, перш ніж переходити до наступного кроку перевантаження конструктора Java
Крок 4) Кожен клас має конструктор за замовчуванням у Java. За замовчуванням перевантажений конструктор Java для класу Demo - це Demo () . Якщо ви не надаєте цей конструктор, компілятор створює його для вас і ініціалізує змінні значеннями за замовчуванням. Ви можете замінити цей конструктор за замовчуванням та ініціалізувати змінні до бажаних значень, як показано в Прикладі 1.
Але якщо ви вказали параметризований конструктор, такий як Demo (int a), і хочете використовувати конструктор за замовчуванням Java Demo (), вам обов’язково вказати його.
Іншими словами, якщо ваш конструктор перевантаження в Java перевизначений, і ви хочете використовувати конструктор за замовчуванням Java, його потрібно вказати.
Крок 5) Рядок для коментарів № 4-8. Збережіть, скомпілюйте та запустіть код.
Ланцюжок конструктора
Розглянемо сценарій, коли базовий клас розширюється дитиною. Щоразу, коли створюється об'єкт дочірнього класу, спочатку викликається конструктор батьківського класу. Це називається ланцюжком конструктора.
Приклад 3: Для розуміння ланцюжка конструкторів
Крок 1) Скопіюйте наступний код у редактор.
class Demo{int value1;int value2;Demo(){value1 = 1;value2 = 2;System.out.println("Inside 1st Parent Constructor");}Demo(int a){value1 = a;System.out.println("Inside 2nd Parent Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){DemoChild d1 = new DemoChild();d1.display();}}class DemoChild extends Demo{int value3;int value4;DemoChild(){//super(5);value3 = 3;value4 = 4;System.out.println("Inside the Constructor of Child");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);System.out.println("Value1 === "+value3);System.out.println("Value2 === "+value4);}}
Крок 2) Запустіть код. Завдяки ланцюжку конструкторів, коли створюється об'єкт дочірнього класу DemoChild, спочатку викликається конструктор Demo () батьківського класу, а пізніше створюється конструктор DemoChild () дочірнього. Очікуваний результат =
Inside 1st Parent ConstructorInside the Constructor of ChildValue1 === 1Value2 === 2Value1 === 3Value2 === 4
Крок 3) Ви можете спостерігати, як конструктор батьківського класу Demo замінений. Що робити, якщо ви хочете викликати перевизначений конструктор Demo (int a) замість конструктора за замовчуванням Demo (), коли створюється ваш дочірній об’єкт?
У таких випадках ви можете використовувати ключове слово "супер" для виклику перевизначених конструкторів батьківського класу.
Синтаксис: -
super();--or--super(parameter list);
Приклад: Якщо ваш конструктор схожий на Demo (String Name, int a), ви вкажете super ("Java", 5) Якщо використовується, ключове слово super має бути першим рядком коду в конструкторі дочірнього класу.
Крок 4) Розкоментуйте рядок №26 і запустіть код. Дотримуйтесь результатів.
Вихід:
Inside 2nd Parent ConstructorInside the Constructor of ChildValue1 === 5Value2 === 0Value1 === 3Value2 === 4