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); // UnknownDer 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 parametrisiertenDer 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.
Aufgabe
EinfachLassen 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 KlasseProduct, die zwei Möglichkeiten bietet, Produkte zu erstellen:- Einen expliziten Standardkonstruktor
Product(), dernameauf'Unnamed'undpriceauf0.0unter Verwendung einer Initialisierungsliste initialisiert - Einen benannten Konstruktor
Product.withDetails, der die Parameternameundpriceakzeptiert - Eine Methode
display(), die Folgendes ausgibt:Product: [name] - $[price]
- Einen expliziten Standardkonstruktor
main.dart: Importieren Sie Ihre Produktklasse und erstellen Sie zwei Produkte:- Eines unter Verwendung des Standardkonstruktors
- Eines unter Verwendung des benannten Konstruktors mit
'Laptop'und999.99
display()für jedes Produkt auf.
Ihre Klasse Product sollte zwei Instanzvariablen haben:
String namedouble price
Erwartetes Ausgabeformat:
Product: Unnamed - $0.0
Product: Laptop - $999.99Spickzettel
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); // UnknownSobald 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 KonstruktorDer 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
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor