Перевантаження конструктора в Java

⚡ Розумний підсумок

Перевантаження конструктора в Java дозволяє класу оголошувати кілька конструкторів, що відрізняються списком параметрів, надаючи розробникам гнучку ініціалізацію об'єктів, чистіше повторне використання коду через this() та передбачувану поведінку, коли під час створення екземпляра потрібні значення за замовчуванням або власні значення.

  • 🏗️ Визначення: Перевантаження конструктора в Java дозволяє використовувати кілька конструкторів в одному класі, що відрізняються кількістю, типом або порядком параметрів.
  • 🧩 Гнучкість: Перевантажені конструктори ініціалізують об'єкти різними наборами аргументів.
  • 🔀 Ланцюжок: Ключові слова this() та super() забезпечують безпечне ланцюжування конструкторів.
  • Значення за замовчуванням: Якщо існує параметризований конструктор, необхідно оголосити форму за замовчуванням.
  • 🧪 Приклади: Code зразки демонструють дійсні підписи та поведінку ланцюжка.

Перевантаження конструктора в Java

Що таке перевантаження конструктора? Java?

Перевантаження конструктора в Java – це техніка, за якої клас оголошує кілька конструкторів, що відрізняються списком параметрів. Компілятор розрізняє ці конструктори, аналізуючи кількість параметрів та їхні типи даних.

Приклади коректних конструкторів для класу Акаунт показано нижче:

Account(int a);
Account (int a,int b);
Account (String a,int b);

Навіщо нам потрібне перевантаження конструктора в Java?

Перевантаження конструктора в Java покращує гнучкість та ефективність коду, дозволяючи використовувати кілька конструкторів у класі, кожен з яких має різний список параметрів.

  • Гнучкість у створенні об'єктів: Перевантаження конструктора дозволяє ініціалізувати об'єкти різними способами, залежно від кількості або типу параметрів.
  • Code Багаторазовість: Ви можете повторно використовувати логіку конструктора, викликаючи один конструктор з іншого за допомогою це () keyword.
  • Покращена читаність: Перевантажені конструктори роблять код більш інтуїтивним, пропонуючи специфічні опції для різних потреб ініціалізації.
  • Стандартна та спеціальна ініціалізація: Перевантаження конструктора дозволяє легко створювати як об'єкти за замовчуванням, так і об'єкти, ініціалізовані користувачем.

Приклад: Перевантаження конструктора в Java

У наступному прикладі демонструється перевантаження конструктора в 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Конструктор за замовчуванням для клас Демо is Демо ()Якщо ви його не надасте, компілятор створить його за вас та ініціалізує змінні значеннями за замовчуванням.

Однак, якщо ви вкажете параметризований конструктор, наприклад Демо(ціле значення a) і хочете використовувати значення за замовчуванням Демо (), обов'язково це чітко оголосити.

Крок 5) Розкоментуйте рядки 4-8 коду, потім збережіть, скомпілюйте та запустіть програму ще раз, щоб спостерігати за зміною поведінки.

З'єднання конструкторів Java

Розглянемо сценарій, коли базовий клас розширюється дочірнім класом. Щоразу, коли створюється об’єкт дочірнього класу, спочатку викликається конструктор батьківського класу. Це називається Ланцюжок конструкторів.

приклад: Щоб зрозуміти ланцюжок конструкторів з перевантаженням конструктора в Java

Крок 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) Запустіть код. Через ланцюжок конструкторів, коли об'єкт дочірнього класу ДемоДитина створюється конструктор Демо () батьківського класу викликається першим, а потім конструктор ДемоДитина() дитини біжить далі.

Очікуваний результат:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Крок 3) Ви можете помітити, що батьківський конструктор Демо () виконується за замовчуванням. Щоб викликати перевантажений конструктор Демо(ціле значення a) замість цього використовуйте ключове слово “супер”.

Синтаксис:

super();
--or--
super(parameter list);

приклад: Якщо ваш батьківський конструктор такий Демо(Назва рядка, int a), уточните ви супер("Java”,5). Якщо використовується, ключове слово супер має бути першим рядком коду в конструкторі дочірнього класу.

Крок 4) Розкоментуйте рядок 26 та запустіть код. Спостерігайте за результатом.

вихід:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4

Поширені запитання

Конструктор — це спеціальний метод, який використовується для ініціалізації щойно створеного об'єкта, що викликається одразу після виділення пам'яті. Якщо не надано користувацького конструктора, компілятор ініціалізує змінні-члени значеннями за замовчуванням, такими як 0 для числових типів та null для посилань.

A Java Конструктор повинен мати ту саму назву, що й його клас, і не повинен оголошувати жодного типу повернення, навіть void. Перевантаження конструктора в Java досягається шляхом зміни кількості, типу або порядку параметрів у кількох оголошеннях конструкторів в межах одного класу.

Ланцюжок конструкторів відбувається, коли конструктор дочірнього класу викликає конструктор батьківського класу, неявно або явно за допомогою super(). Це працює разом з перевантаженням конструктора в Java щоб забезпечити правильну ініціалізацію успадкованих полів перед виконанням логіки, специфічної для підкласу, під час створення об'єкта.

Перевантаження конструкторів визначає кілька конструкторів, які ініціалізують об'єкти різними способами, тоді як перевантаження методів визначає кілька методів, які виконують пов'язані операції з різними вхідними даними. Конструктори виконуються під час створення об'єкта з новими, тоді як перевантажені методи викликаються явно для існуючих об'єктів або класів.

Так, помічники кодування зі штучним інтелектом можуть генерувати перевантаження конструктора в Java з підказок природної мови або діаграм класів. Вони створюють сигнатури конструкторів, делегують логіку за допомогою this() та додають Javaкоментарі doc, що пришвидшує створення шаблонних варіантів, водночас вимагаючи перевірки розробником на правильність та дотримання правил проекту.

Інструменти штучного інтелекту можуть аналізувати існуючі класи та рекомендувати рефакторинг перевантаження конструктора в Java шляхом об'єднання надлишкових конструкторів, введення шаблонів конструкторів абоtracпомічники ініціалізації. Вони виділяють неоднозначні перевантаження, пропонують перейменування параметрів та узгоджують дизайн конструктора з такими шаблонами, як незмінність та впровадження залежностей.

Підсумуйте цей пост за допомогою: