Перегрузка конструкторов
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 8 из 87.
Перегрузка конструкторов означает наличие нескольких конструкторов с разными списками параметров. Используйте this() для вызова одного конструктора из другого.
Несколько конструкторов
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this.title = title;
this.author = author;
this.pages = 0;
}
}Цепочка вызовов конструкторов с this()
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this(title, author, 0); // Вызывает конструктор с 3 параметрами
}
public Book() {
this("Unknown", "Unknown"); // Вызывает конструктор с 2 параметрами
}
}Использование
Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();this() должен быть первым оператором в конструкторе. Цепочка вызовов позволяет избежать дублирования логики присваивания между конструкторами.
Задание
СреднеСоздайте три перегруженных конструктора для класса Product, используя цепочку конструкторов:
- Конструктор с 3 параметрами: name, price, stock
- Конструктор с 2 параметрами: name, price (stock по умолчанию равен 0)
- Конструктор по умолчанию: без параметров (name = "Unknown", price = 0, stock = 0)
Используйте this() для вызова конструкторов по цепочке и избежания дублирования кода.
Шпаргалка
Перегрузка конструкторов позволяет иметь несколько конструкторов с различными списками параметров в одном и том же классе.
Пример использования нескольких конструкторов:
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this.title = title;
this.author = author;
this.pages = 0;
}
}Цепочка конструкторов с использованием this() вызывает один конструктор из другого, чтобы избежать дублирования кода:
public class Book {
private String title;
private String author;
private int pages;
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
public Book(String title, String author) {
this(title, author, 0); // Вызывает конструктор с 3 параметрами
}
public Book() {
this("Unknown", "Unknown"); // Вызывает конструктор с 2 параметрами
}
}Использование:
Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();Важно: this() должен быть первым оператором в конструкторе.
Попробуйте сами
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
double price = Double.parseDouble(scanner.nextLine());
int stock = Integer.parseInt(scanner.nextLine());
Product product1 = new Product(name, price, stock);
Product product2 = new Product("Keyboard", 79.99);
Product product3 = new Product();
System.out.println("Product 1: " + product1.getName() + " - $" + product1.getPrice() + " (Stock: " + product1.getStock() + ")");
System.out.println("Product 2: " + product2.getName() + " - $" + product2.getPrice() + " (Stock: " + product2.getStock() + ")");
System.out.println("Product 3: " + product3.getName() + " - $" + product3.getPrice() + " (Stock: " + product3.getStock() + ")");
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»