返回
深入浅出 Dart 继承机制:extends、implements 与 mixin 的全面解析
Android
2024-01-14 04:09:02
在 Dart 中,继承是一种强大的机制,可让您创建新的类,这些类从现有的类中继承属性和行为。有三种类型的继承:extends
、implements
和 mixin
。了解它们之间的区别至关重要,这样您才能在代码中有效地使用它们。
1. extends:子类继承父类
extends
用于创建子类,它从父类继承属性和方法。子类可以访问父类的所有 public 和 protected 成员,并且可以覆盖(override)父类中的方法以实现不同的行为。
class Animal {
String name;
Animal(this.name);
void eat() {
print('${this.name} is eating.');
}
}
class Dog extends Animal {
Dog(String name) : super(name);
@override
void eat() {
super.eat();
print('${this.name} is barking while eating.');
}
}
void main() {
Animal animal = Animal('Animal');
animal.eat(); // Animal is eating.
Dog dog = Dog('Dog');
dog.eat(); // Dog is eating.
// Dog is barking while eating.
}
2. implements:实现接口
implements
关键字用于实现接口。接口是一种只包含方法声明(没有实现)的类。类可以通过 implements
关键字实现接口,并必须实现接口中声明的所有方法。
interface Shape {
double getArea();
}
class Circle implements Shape {
double radius;
Circle(this.radius);
@override
double getArea() => 3.14 * radius * radius;
}
void main() {
Shape circle = Circle(5);
print(circle.getArea()); // 78.5
}
3. mixin:引入额外的行为
mixin
类似于接口,但它允许类在不创建子类的情况下引入额外的行为。使用 with
关键字将 mixin 应用于类。mixin 中的方法可以被类中的其他方法覆盖。
mixin Flyable {
void fly() {
print('I am flying.');
}
}
class Bird {
String name;
Bird(this.name);
void sing() {
print('${this.name} is singing.');
}
}
class FlyingBird extends Bird with Flyable {
FlyingBird(String name) : super(name);
}
void main() {
FlyingBird flyingBird = FlyingBird('Eagle');
flyingBird.sing(); // Eagle is singing.
flyingBird.fly(); // I am flying.
}
结论
extends
、implements
和 mixin
是 Dart 中三种重要的继承类型,每种类型都有其独特的用途。extends
用于创建从现有类继承的子类,implements
用于实现接口,而 mixin
用于引入额外的行为。了解这些继承类型的区别对于有效地编写可重用和可维护的 Dart 代码至关重要。