Перегрузка конструктора в Java

Что такое перегрузка конструктора Java?

Java Перегрузка конструктора — это метод, при котором класс может иметь любое количество конструкторов, различающихся списком параметров. Компилятор различает эти конструкторы, принимая во внимание количество параметров в списке и их тип.

Примерами допустимых конструкторов для класса 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 для демонстрация класса is Демо(). Если вы не предоставляете этот конструктор, компилятор создаст его за вас и инициализирует переменные значениями по умолчанию. Вы можете переопределить этот конструктор по умолчанию и инициализировать переменные нужными значениями, как показано в примере 1.

Но если вы укажете параметризованный конструктор, например Demo(int a), и хотите использовать конструктор по умолчанию Java Demo(), указать его обязательно.

Другими словами, если ваш конструктор перегрузки в Java переопределено, и вы хотите использовать конструктор по умолчанию Java, его необходимо указать.

Шаг 5) Раскомментируйте строки № 4–8. Сохраните, скомпилируйте и запустите код.

Зачем нам нужна перегрузка конструктора в Java?

Перегрузка конструктора в Java позволяет использовать несколько конструкторов в классе, каждый из которых имеет разные списки параметров. Это повышает гибкость и улучшает эффективность кода.

  • Гибкость в создании объектов: Перегрузка конструктора позволяет инициализировать объекты различными способами в зависимости от количества или типа параметров.
  • Повторное использование кода: Вы можете повторно использовать логику конструктора, вызывая один конструктор из другого с помощью ключевого слова this().
  • Улучшенная читаемость: Перегруженные конструкторы помогают сделать код более интуитивно понятным, предлагая определенные параметры конструктора для различных потребностей инициализации.
  • Инициализация по умолчанию и пользовательская инициализация: Перегрузка конструктора позволяет легко создавать как объекты по умолчанию, так и объекты, инициализированные пользователем.

Часто задаваемые вопросы

Конструктор — это специальный метод, который используется для инициализации вновь созданного объекта и вызывается сразу после выделения памяти для объекта. Его можно использовать для инициализации объектов с желаемыми значениями или значениями по умолчанию во время создания объекта. Программисту не обязательно писать конструктор для класса.

Если для класса не предусмотрен пользовательский конструктор, компилятор инициализирует переменные-члены значениями по умолчанию.

  • числовые типы данных установлены на 0
  • Типы данных char имеют значение нулевой символ ('\0')
  • ссылочным переменным присвоено значение null

  1. Он имеет то же имя как класс
  2. Он не должен возвращать значение даже аннулировать

Пример 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 Constructor
Value1 === 10
Value2 === 20

Рассмотрим сценарий, в котором базовый класс расширяется дочерним элементом. Всякий раз, когда создается объект дочернего класса, сначала вызывается конструктор родительского класса. Это называется Конструктор цепочки.

Пример 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 Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Шаг 3) Вы можете заметить, что конструктор родительского класса Demo переопределен. Что, если вы хотите вызвать переопределенный конструктор Demo(int a) вместо конструктора по умолчанию Demo() при создании дочернего объекта?

В таких случаях вы можете использовать ключевое слово "супер" для вызова переопределенных конструкторов родительского класса.

Синтаксис:-

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

Пример: Если ваш конструктор похож Демо (имя строки, целое число a), вы уточните супер("Java»,5). Если используется ключевое слово супер должно быть первой строкой кода в конструкторе дочернего класса.

Шаг 4) Раскомментируйте строку №26 и запустите код. Наблюдайте за выводом.

Вывод:

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