返回

Dart中的extends、implements和with:它们的用法与区别

Android

extends:继承

在Dart中,extends用于实现类的继承。子类可以继承父类的所有成员变量和方法,并可以扩展或重写父类的方法。例如:

class Animal {
  String name;
  int age;

  void eat() {
    print('Animal is eating.');
  }
}

class Dog extends Animal {
  String breed;

  void bark() {
    print('Dog is barking.');
  }
}

void main() {
  Dog dog = Dog();
  dog.name = 'Fido';
  dog.age = 3;
  dog.breed = 'Golden Retriever';

  dog.eat(); // prints 'Animal is eating.'
  dog.bark(); // prints 'Dog is barking.'
}

在这个例子中,Dog类继承了Animal类。Dog类可以访问和使用Animal类中的所有成员变量和方法,同时也可以定义自己的成员变量和方法。

implements:实现

在Dart中,implements关键字用于实现接口。接口是一种只包含方法声明的类,不包含任何实现。类可以通过implements关键字来实现接口,并提供接口中方法的实现。例如:

class Animal {
  void eat() {
    print('Animal is eating.');
  }
}

class Dog implements Animal {
  String name;
  int age;
  String breed;

  void bark() {
    print('Dog is barking.');
  }

  @override
  void eat() {
    print('Dog is eating.');
  }
}

void main() {
  Dog dog = Dog();
  dog.name = 'Fido';
  dog.age = 3;
  dog.breed = 'Golden Retriever';

  dog.eat(); // prints 'Dog is eating.'
  dog.bark(); // prints 'Dog is barking.'
}

在这个例子中,Dog类实现了Animal接口。Dog类必须实现Animal接口中的所有方法,否则会产生编译错误。

with:混入

在Dart中,with关键字用于实现类的组合。混入是一种可以将另一个类的成员变量和方法添加到当前类中的机制。例如:

class Animal {
  String name;
  int age;

  void eat() {
    print('Animal is eating.');
  }
}

class Dog {
  String breed;

  void bark() {
    print('Dog is barking.');
  }
}

class GoldenRetriever with Dog {
  String color;

  void fetch() {
    print('Golden Retriever is fetching.');
  }
}

void main() {
  GoldenRetriever retriever = GoldenRetriever();
  retriever.name = 'Fido';
  retriever.age = 3;
  retriever.breed = 'Golden Retriever';
  retriever.color = 'Golden';

  retriever.eat(); // prints 'Animal is eating.'
  retriever.bark(); // prints 'Dog is barking.'
  retriever.fetch(); // prints 'Golden Retriever is fetching.'
}

在这个例子中,GoldenRetriever类使用了with关键字来混入Dog类。GoldenRetriever类可以访问和使用Dog类中的所有成员变量和方法,同时也可以定义自己的成员变量和方法。

区别

  • extends:继承是类与类之间的关系,子类可以继承父类的所有成员变量和方法。
  • implements:实现是类与接口之间的关系,类必须实现接口中定义的所有方法。
  • with:混入是类与类之间的关系,类可以将另一个类的成员变量和方法添加到当前类中。

总结

  • extends用于实现类的继承,子类可以继承父类的所有成员变量和方法。
  • implements用于实现接口,类必须实现接口中定义的所有方法。
  • with用于实现类的组合,类可以将另一个类的成员变量和方法添加到当前类中。