Претоварване на конструктора в 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 Повторна употреба: Можете да използвате повторно логиката на конструктора, като извикате един конструктор от друг, използвайки това() ключова дума.
  • Подобрена четливост: Претоварените конструктори правят кода по-интуитивен, като предлагат специфични опции за различни нужди от инициализация.
  • Инициализация по подразбиране и по избор: Претоварването на конструктора ви позволява лесно да създавате както обекти по подразбиране, така и такива, инициализирани по поръчка.

Пример: Претоварване на конструктора в 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 Демо ()Ако не го предоставите, компилаторът го създава вместо вас и инициализира променливите със стойности по подразбиране.

Ако обаче зададете параметризиран конструктор като Демо(int 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) Може да забележите, че родителският конструктор Демо () изпълнява се по подразбиране. За да извикате претоварения конструктор Демо(int 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 за да се гарантира, че наследените полета са инициализирани правилно, преди да се изпълни специфична за подкласа логика по време на създаването на обект.

Претоварването на конструктори дефинира множество конструктори, които инициализират обекти по различни начини, докато претоварването на методи дефинира множество методи, които извършват свързани операции с различни входни данни. Конструкторите се изпълняват по време на създаването на обект с new, докато претоварените методи се извикват изрично върху съществуващи обекти или класове.

Да, асистентите за кодиране с изкуствен интелект могат да генерират претоварване на конструктора в Java от подкани на естествен език или диаграми на класове. Те създават сигнатури на конструктори, делегират логика с this() и добавят Javadoc коментари, което ускорява създаването на шаблонни шаблони, като същевременно изисква преглед от разработчика за коректност и конвенции на проекта.

Инструментите с изкуствен интелект могат да анализират съществуващи класове и да препоръчат рефакторинг на претоварване на конструктора в Java чрез сливане на излишни конструктори, въвеждане на шаблони за изграждане илиtracПомощници за инициализация на ting. Те маркират двусмислени претоварвания, предлагат преименуване на параметри и съгласуват дизайна на конструктора с модели като непроменливост и инжектиране на зависимости.

Обобщете тази публикация с: