Skip to Content
Dart📘 Ngôn ngữ DartInterfaces (implements)

Interfaces trong Dart (implements)

1. Giới thiệu

Trong Dart, mọi class đều implicit là một interface. Sử dụng implements để class phải implement tất cả members.

2. Implicit Interface

class Printable { void print() { print('Printing...'); } } class Document implements Printable { @override void print() { print('Printing document'); } }

3. Implement nhiều interfaces

class Printer { void print() {} } class Scanner { void scan() {} } class Copier { void copy() {} } class AllInOne implements Printer, Scanner, Copier { @override void print() => print('Printing'); @override void scan() => print('Scanning'); @override void copy() => print('Copying'); }

4. Abstract class làm interface

abstract class Drawable { void draw(); void erase(); } abstract class Movable { void move(int x, int y); } class Shape implements Drawable, Movable { @override void draw() => print('Drawing shape'); @override void erase() => print('Erasing shape'); @override void move(int x, int y) => print('Moving to ($x, $y)'); }

5. extends vs implements

class Animal { String name; Animal(this.name); void eat() => print('$name is eating'); } // extends: kế thừa implementation class Dog extends Animal { Dog(String name) : super(name); // Kế thừa eat() từ Animal } // implements: phải implement lại tất cả class Robot implements Animal { @override String name; Robot(this.name); @override void eat() => print('Robot cannot eat'); }

6. Kết hợp extends, implements, with

abstract class Animal { void breathe(); } mixin Swimming { void swim() => print('Swimming'); } class Fish extends Animal with Swimming implements Comparable<Fish> { int size; Fish(this.size); @override void breathe() => print('Breathing underwater'); @override int compareTo(Fish other) => size.compareTo(other.size); }

7. Interface segregation

// Tách interface nhỏ abstract class Readable { String read(); } abstract class Writable { void write(String data); } abstract class Deletable { void delete(); } class TextFile implements Readable, Writable, Deletable { String _content = ''; @override String read() => _content; @override void write(String data) => _content = data; @override void delete() => _content = ''; } class ReadOnlyFile implements Readable { final String _content; ReadOnlyFile(this._content); @override String read() => _content; }

8. Generic Interface

abstract class Repository<T> { T? findById(int id); List<T> findAll(); void save(T item); void delete(int id); } class UserRepository implements Repository<User> { final List<User> _users = []; @override User? findById(int id) => _users.firstWhere((u) => u.id == id); @override List<User> findAll() => List.from(_users); @override void save(User item) => _users.add(item); @override void delete(int id) => _users.removeWhere((u) => u.id == id); }

📝 Tóm tắt

  • Mọi class trong Dart là implicit interface
  • implements bắt buộc implement tất cả members
  • extends kế thừa, implements định nghĩa contract
  • Có thể implement nhiều interfaces
  • Kết hợp với mixins cho flexibility
Last updated on