# implements implements 關鍵字用於讓一個類實現(implement)一個或多個接口(interface)。接口可以是普通類或抽象類,當一個類使用 implements 時,它必須覆寫接口中所有的成員(包括方法和屬性),無論接口是否已經有默認實現。 ### 基本語法 ``` class A { void methodA() { print("Method A from class A"); } } class B implements A { @override void methodA() { print("Method A implemented in class B"); } } ``` * A 是一個普通類。 * B 使用 implements 關鍵字,實現了 A。 * B 必須重新實現 A 中的所有方法和屬性。 在 Dart 語言中,implements 關鍵字用於讓一個類實現(implement)一個或多個接口(interface)。接口可以是普通類或抽象類,當一個類使用 implements 時,它必須覆寫接口中所有的成員(包括方法和屬性),無論接口是否已經有默認實現。 基本語法 dart 複製程式碼 class A { void methodA() { print("Method A from class A"); } } class B implements A { @override void methodA() { print("Method A implemented in class B"); } } A 是一個普通類。 B 使用 implements 關鍵字,實現了 A。 B 必須重新實現 A 中的所有方法和屬性。 1. 實現單一接口 以下是一個具體的例子,展示如何實現一個抽象類作為接口: ``` abstract class Animal { void sound(); // 抽象方法 } class Dog implements Animal { @override void sound() { print("Bark"); } } void main() { var dog = Dog(); dog.sound(); // Output: Bark } ``` Dog 類實現了 Animal 接口,並覆寫了 sound 方法 2. 實現多個接口 如果需要同時實現多個接口,可以使用逗號分隔接口名稱: ``` abstract class Animal { void sound(); } abstract class Runner { void run(); } class Dog implements Animal, Runner { @override void sound() { print("Bark"); } @override void run() { print("Running..."); } } void main() { var dog = Dog(); dog.sound(); // Output: Bark dog.run(); // Output: Running... } ``` Dog 同時實現了 Animal 和 Runner 接口。必須覆寫所有接口中的方法。 3. 實現普通類作為接口 普通類(非抽象類)也可以用作接口。無論普通類是否有默認實現,實現類都需要覆寫所有的成員。 ``` class Person { String name = ''; void speak() { print("Speaking..."); } } class Student implements Person { @override String name = "John"; @override void speak() { print("I am a student."); } } void main() { var student = Student(); print(student.name); // Output: John student.speak(); // Output: I am a student. } ``` 4. 同時使用 extends 和 implements 你可以結合 extends 和 implements 關鍵字,繼承一個父類並同時實現多個接口: ``` abstract class Animal { void sound(); } abstract class Swimmer { void swim(); } class Fish extends Animal implements Swimmer { @override void sound() { print("Blub blub"); } @override void swim() { print("Swimming..."); } } void main() { var fish = Fish(); fish.sound(); // Output: Blub blub fish.swim(); // Output: Swimming... } ``` 5. 注意事項 * 所有成員必須覆寫: 使用 implements 時,必須覆寫所有的方法和屬性,無論它們是否已經有實現。 * 不繼承實現: implements 只會繼承接口的結構(方法簽名和屬性),不會繼承其實現。這與 extends 的行為不同。 * 適用於多接口實現: implements 適用於實現多個接口的情況,使一個類能夠同時具有多種行為。 * 適合接口式編程: 使用 implements 可以實現依賴反轉、靈活替換實現類,從而提高代碼的可測試性和可維護性。 6. 使用場景 * 多態設計: 讓一個類同時實現多個接口,提供不同的行為能力。 * 接口一致性: 保證不同類型的對象都遵循同樣的接口結構,便於在集合、泛型中統一處理。 * 依賴反轉原則: 配合接口注入,可以在不修改代碼的前提下替換具體實現類。 結論: 在 Dart 中,implements 是一個非常靈活和強大的工具,可以用來實現接口式編程,強制類遵循某些約定或協議,並支持多接口實現。這種設計模式非常適合構建大型可擴展的應用程序,使代碼結構更加清晰且易於維護。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up