Menu
Coddy logo textTech

Конструктор по умолчанию

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 10 из 110.

Когда вы не определяете ни одного конструктора в классе, Dart автоматически предоставляет конструктор по умолчанию. Это конструктор без параметров, который просто создает экземпляр класса.

class Book {
  String title = 'Unknown';
  int pages = 0;
}

// Dart предоставляет конструктор по умолчанию: Book()
Book myBook = Book();
print(myBook.title); // Unknown

Конструктор по умолчанию невидим в вашем коде, но он существует. Он не принимает аргументов и инициализирует объект теми значениями по умолчанию, которые вы присвоили переменным экземпляра.

Как только вы определяете свой собственный конструктор, конструктор по умолчанию больше не предоставляется автоматически. Если вам все еще нужен конструктор без аргументов наряду с параметризованным, вы должны создать его явно:

class Book {
  String title;
  int pages;

  // Явный конструктор по умолчанию
  Book() : title = 'Unknown', pages = 0;

  // Параметризованный конструктор
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Использует конструктор по умолчанию
Book book2 = Book.withDetails('Dart', 300); // Использует параметризованный конструктор

Явный конструктор по умолчанию использует список инициализации (часть после двоеточия) для установки начальных значений. Этот паттерн полезен, когда вы хотите предложить несколько способов создания объектов одного и того же класса.

challenge icon

Задание

Легко

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

Вы создадите два файла для организации вашего кода:

  • product.dart: Определите класс Product, который предлагает два способа создания товаров:
    • Явный конструктор по умолчанию Product(), который инициализирует name значением 'Unnamed' и price значением 0.0, используя список инициализации
    • Именованный конструктор Product.withDetails, который принимает параметры name и price
    • Метод display(), который выводит: Product: [name] - $[price]
  • main.dart: Импортируйте ваш класс продукта и создайте два товара:
    • Один с использованием конструктора по умолчанию
    • Другой с использованием именованного конструктора с 'Laptop' и 999.99
    Вызовите display() для каждого товара.

Ваш класс Product должен иметь две переменные экземпляра:

  • String name
  • double price

Ожидаемый формат вывода:

Product: Unnamed - $0.0
Product: Laptop - $999.99

Попробуйте сами

import 'product.dart';

void main() {
  // TODO: Создайте продукт, используя конструктор по умолчанию
  
  // TODO: Создайте продукт, используя именованный конструктор с 'Laptop' и 999.99
  
  // TODO: Вызовите display() для каждого продукта
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование