Konstruktor domyślny
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 10 z 110.
Jeśli nie zdefiniujesz żadnego konstruktora w klasie, Dart automatycznie udostępni konstruktor domyślny. Jest to konstruktor bez parametrów, który po prostu tworzy instancję klasy.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart udostępnia konstruktor domyślny: Book()
Book myBook = Book();
print(myBook.title); // UnknownKonstruktor domyślny jest niewidoczny w Twoim kodzie, ale istnieje. Nie przyjmuje żadnych argumentów i inicjalizuje obiekt wartościami domyślnymi przypisanymi do zmiennych instancji.
Gdy zdefiniujesz własny konstruktor, domyślny konstruktor nie będzie już udostępniany automatycznie. Jeśli chcesz mieć konstruktor bez argumentów obok konstruktora sparametryzowanego, musisz utworzyć go jawnie:
class Book {
String title;
int pages;
// Jawnie zdefiniowany konstruktor domyślny
Book() : title = 'Unknown', pages = 0;
// Konstruktor parametryczny
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Używa konstruktora domyślnego
Book book2 = Book.withDetails('Dart', 300); // Używa konstruktora parametrycznegoJawnie zdefiniowany konstruktor domyślny używa listy inicjalizacyjnej (części po dwukropku), aby ustawić wartości początkowe. Ten wzorzec jest przydatny, gdy chcesz oferować kilka sposobów tworzenia obiektów z tej samej klasy.
Wyzwanie
ŁatwyZbudujmy prosty system ewidencji produktów, który demonstruje zarówno niejawne, jak i jawne konstruktory domyślne.
Utworzysz dwa pliki, aby uporządkować swój kod:
product.dart: Zdefiniuj klasęProduct, która oferuje dwa sposoby tworzenia produktów:- Jawny konstruktor domyślny
Product(), który inicjalizujenamewartością'Unnamed'ipricewartością0.0za pomocą listy inicjalizacyjnej - Konstruktor nazwany
Product.withDetails, który przyjmuje parametrynameiprice - Metodę
display(), która wyświetla:Product: [name] - $[price]
- Jawny konstruktor domyślny
main.dart: Zaimportuj klasę produktu i utwórz dwa produkty:- Jeden przy użyciu konstruktora domyślnego
- Jeden przy użyciu konstruktora nazwanego z wartościami
'Laptop'i999.99
display()dla każdego produktu.
Klasa Product powinna mieć dwie zmienne instancji:
String namedouble price
Oczekiwany format wyjścia:
Product: Unnamed - $0.0
Product: Laptop - $999.99Spróbuj swoich sił
import 'product.dart';
void main() {
// TODO: Utwórz produkt za pomocą konstruktora domyślnego
// TODO: Utwórz produkt za pomocą konstruktora nazwanego, podając 'Laptop' i 999.99
// TODO: Wywołaj display() dla każdego produktu
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online