Menu
Coddy logo textTech

Standard-Konstruktor

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 10 von 110.

Wenn Sie keinen Konstruktor in einer Klasse definieren, stellt Dart automatisch einen Standardkonstruktor bereit. Dies ist ein Konstruktor ohne Parameter, der einfach eine Instanz der Klasse erstellt.

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

// Dart stellt einen Standard-Konstruktor bereit: Book()
Book myBook = Book();
print(myBook.title); // Unknown

Der Standardkonstruktor ist in Ihrem Code unsichtbar, aber er existiert. Er nimmt keine Argumente entgegen und initialisiert das Objekt mit den Standardwerten, die Sie den Instanzvariablen zugewiesen haben.

Sobald Sie Ihren eigenen Konstruktor definieren, wird der Standardkonstruktor nicht mehr automatisch bereitgestellt. Wenn Sie weiterhin einen argumentlosen Konstruktor neben einem parametrisierten wünschen, müssen Sie diesen explizit erstellen:

class Book {
  String title;
  int pages;

  // Expliziter Standardkonstruktor
  Book() : title = 'Unknown', pages = 0;

  // Parametrisierter Konstruktor
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Verwendet Standard
Book book2 = Book.withDetails('Dart', 300); // Verwendet parametrisierten

Der explizite Standardkonstruktor verwendet eine Initialisierungsliste (der Teil nach dem Doppelpunkt), um Initialwerte festzulegen. Dieses Muster ist nützlich, wenn Sie mehrere Möglichkeiten anbieten möchten, Objekte aus derselben Klasse zu erstellen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Produktinventarsystem erstellen, das sowohl implizite als auch explizite Standardkonstruktoren demonstriert.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • product.dart: Definieren Sie eine Klasse Product, die zwei Möglichkeiten bietet, Produkte zu erstellen:
    • Einen expliziten Standardkonstruktor Product(), der name auf 'Unnamed' und price auf 0.0 unter Verwendung einer Initialisierungsliste initialisiert
    • Einen benannten Konstruktor Product.withDetails, der die Parameter name und price akzeptiert
    • Eine Methode display(), die Folgendes ausgibt: Product: [name] - $[price]
  • main.dart: Importieren Sie Ihre Produktklasse und erstellen Sie zwei Produkte:
    • Eines unter Verwendung des Standardkonstruktors
    • Eines unter Verwendung des benannten Konstruktors mit 'Laptop' und 999.99
    Rufen Sie display() für jedes Produkt auf.

Ihre Klasse Product sollte zwei Instanzvariablen haben:

  • String name
  • double price

Erwartetes Ausgabeformat:

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

Spickzettel

Wenn in einer Klasse kein Konstruktor definiert ist, stellt Dart automatisch einen Standardkonstruktor ohne Parameter zur Verfügung:

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

Book myBook = Book(); // Verwendet den impliziten Standardkonstruktor
print(myBook.title); // Unknown

Sobald Sie Ihren eigenen Konstruktor definieren, wird der Standardkonstruktor nicht mehr automatisch bereitgestellt. Um sowohl einen Konstruktor ohne Argumente als auch einen parametrisierten Konstruktor zu haben, müssen Sie diese explizit erstellen:

class Book {
  String title;
  int pages;

  // Expliziter Standardkonstruktor mit Initialisierungsliste
  Book() : title = 'Unknown', pages = 0;

  // Benannter Konstruktor
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Verwendet Standard
Book book2 = Book.withDetails('Dart', 300); // Verwendet benannten Konstruktor

Der explizite Standardkonstruktor verwendet eine Initialisierungsliste (nach dem Doppelpunkt), um Anfangswerte festzulegen.

Probier es selbst

import 'product.dart';

void main() {
  // TODO: Erstelle ein Produkt mit dem Standard-Konstruktor
  
  // TODO: Erstelle ein Produkt mit dem benannten Konstruktor mit 'Laptop' und 999.99
  
  // TODO: Rufe display() für jedes Produkt auf
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung