v tomto příspěvku půjdeme pokrýt případy použití pro implementuje, rozšiřuje a klíčová slova. Implementuje v / s rozšiřuje v / s s klíčovými slovy v Dart.
Úvod
pokud vyvíjíte aplikaci Flutter, měli jste vidět mnoho případů použití pro implementuje, rozšiřuje a klíčová slova. Pro někoho, kdo s Dart nikdy předtím nepracoval, není rozdíl mezi těmito klíčovými slovy zřejmý.
v tomto příspěvku půjdeme do hloubky o těchto klíčových slovech, abychom rozšířili naše chápání flutteru a šipky.
Implements je pro vynucení chování přes rozhraní
v OOP je rozhraní něco, co vynucuje odvozující třídu k implementaci nastaveného seznamu veřejných polí a metod.
ale na rozdíl od jiných tradičních programovacích jazyků, jako je C# a JAVA, Dart nemá explicitní typy rozhraní. Každá třída ve výchozím nastavení definuje své vlastní rozhraní složené z veřejných polí a metod. Takže každá třída může fungovat jako rozhraní v Dart.
používáme Klíčové slovo implementuje implementovat rozhraní. Třída může také implementovat více rozhraní.
V příkladu výše, třída D implementuje třídy a, B a C tedy musí realizovat veřejné metody a pole těchto tříd.
kromě toho, protože Dart nemá explicitní rozhraní, používáme abstraktní třídu jako rozhraní.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Rozšiřuje Je Pro Sdílení Chování Prostřednictvím Dědictví
V OOP, dědičnost znamená sdílení chování mezi třídami. Nemůžeme sdílet funkce s rozhraním. Takže když implementujeme třídu, nemůžeme sdílet její chování.
Ve výše uvedeném příkladu můžete vidět, že třídy B musí poskytovat je vlastní provádění doA() metoda jako chování není sdílený.
Pokud chcete sdílet chování mezi těmito dvěma třídami, měli byste použít klíčové slovo extends.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
Ve výše uvedeném příkladu, protože B rozšiřuje, můžete volat doA() metoda přímo od B je objekt.
Na rozdíl od implementace více rozhraní Dart podporuje pouze jednu dědičnost. Takže nemůžete rozšířit z více tříd.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
s Is pro Mixin
v OOP je mixin třída, která obsahuje metody pro použití jinými třídami. Na rozdíl od přístupu rozhraní a dědičnosti nemusí být mixin nadřazenou třídou těchto jiných tříd.
takže mixin neukládá omezení použití ani vynucuje omezení typu.
obvykle vložíte společné funkce do mixinu. V Dart, využíváme mixin pomocí klíčového slova s.
Jak je znázorněno v příkladu výše, provádění mixin pole může být přepsána, pokud je požadováno. Kromě toho může třída používat více mixinů.
Pár Věcí, Na Vědomí, O Mixin
Použití Třídy Jako Mixin
V Dart, třída může být také použit jako mixin je-li třída konstruktor-méně. Například níže uvedený kód je platný.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
ale tento Níže je neplatný, protože třída D deklaruje Konstruktor.
class D { D() { } doD() { print('d'); }}class E with D {}
Prosazování Mixin Pro Konkrétní Typy
můžete také vynutit mixin, aby byl použitelný pro určité typy tříd pouze pomocí na klíčové slovo při definování mixin.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
Závěr
V tomto příspěvku jsme se dozvěděli o případy použití nářadí, prodlužuje a s klíčová slova při vývoji Flutter/Dart aplikací.
implementuje v / s rozšiřuje v / s pomocí
shrnout použití:
- implementuje pro vynucování chování.
- se vztahuje na sdílení chování jedné třídy.
- Mixins pro sdílení chování z více opakovaně použitelných typů.
další informace:
- Dart Language Features
- Learn Flutter