Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Перегрузка конструкторов в Java — Объяснение с практическими примерами кода

Что такое конструктор в Java?

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

Это руководство охватывает:

Правила создания Java-конструктора

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

Пример 1 — Первый конструктор

Шаг 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: Скомпилируйте и запустите программу. Вывод:

Inside Constructor
Value1 === 10
Value2 === 20

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

Java позволяет классу определять несколько конструкторов с разными списками параметров. Компилятор отличает их по количеству и типам параметров.

Валидные конструкторы для класса Account могут выглядеть так:

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

Пример 2 — Перегруженные конструкторы

Шаг 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: Скомпилируйте и запустите. Вы получите ошибку, потому что конструктор по умолчанию Demo() отсутствует после добавления параметризованного конструктора. Чтобы использовать конструктор по умолчанию, явно объявите его:

Demo() {
    // инициализация по умолчанию или пользовательская логика
}

После раскомментирования закомментированного блока и повторной компиляции программа запускается корректно.

Цепочка конструкторов

Когда инстанцируется подкласс, сначала выполняется конструктор суперкласса — это известно как цепочка конструкторов.

Пример 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("Value3 === " + value3);
        System.out.println("Value4 === " + value4);
    }
}

Шаг 2: Запустите программу. Поскольку конструктор ребенка не вызывает super() явно, сначала выполняется конструктор по умолчанию Demo(). Ожидаемый вывод:

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

Шаг 3: Чтобы вызвать перегруженный конструктор родителя Demo(int a), поместите super(5); как первую строку в конструкторе ребенка. После раскомментирования строки и повторного запуска:

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

Использование super(...) обязательно, когда вам нужен конкретный конструктор суперкласса, выполняемый перед логикой подкласса.

java

  1. Освоение перегрузки конструкторов в C#
  2. Java Hello World: ваша первая программа
  3. Освоение конструкторов Java: типы, использование и практические примеры
  4. Конструкторы в Java Enums: объяснение с практическим примером
  5. Освоение String.indexOf() в Java: поиск подстрок и практические примеры
  6. Освоение String.compareTo() в Java: синтаксис, сценарии использования и примеры
  7. Ключевое слово static в Java: переменные, методы и блоки — практические примеры
  8. Java-программа для определения, является ли число простым
  9. Java-программа для вывода простых чисел от 1 до 100 — пошаговое руководство
  10. Конвертация char в String в Java — практические примеры и лучшие практики