面向对象中的 Dart 抽象类abstract、extends、implements
2024-01-18 15:43:17
什么是抽象类?
抽象类是一种特殊的类, 它只用于创建派生类, 但不能用于创建对象。抽象类通常定义了成员变量和成员函数, 这些成员变量和成员函数可以被派生类继承和使用。抽象类中可能包含抽象方法, 这些方法没有具体实现, 必须由派生类来实现。
**abstract **
abstract 关键字用于定义抽象类和抽象方法。如果一个类中包含抽象方法, 那么这个类必须被声明为抽象类。抽象方法不能在抽象类中实现, 必须由派生类来实现。
继承 (extends)
继承是面向对象编程中的一种重要概念。继承允许一个类从另一个类继承属性和方法。派生类可以访问和使用基类的属性和方法, 同时还可以定义自己的属性和方法。
实现 (implements)
实现是另一个重要的面向对象概念。实现允许一个类实现一个或多个接口。接口定义了一组方法, 类必须实现这些方法才能被认为实现了这个接口。
抽象类在 Dart 中的运用
为了更好地理解抽象类, 我们举一个简单的例子。假设我们要构建一个形状类, 这个类应该包含一些共同的属性, 如面积、周长等。同时, 我们还希望创建不同的形状, 如圆形、矩形和三角形。这些形状都具有不同的属性和方法, 但它们都继承自同一个形状类。
abstract class Shape {
double get area;
double get perimeter;
}
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double get area => pi * radius * radius;
@override
double get perimeter => 2 * pi * radius;
}
class Rectangle extends Shape {
double width;
double height;
Rectangle(this.width, this.height);
@override
double get area => width * height;
@override
double get perimeter => 2 * (width + height);
}
class Triangle extends Shape {
double base;
double height;
Triangle(this.base, this.height);
@override
double get area => 0.5 * base * height;
@override
double get perimeter => base + height + Math.sqrt(base * base + height * height);
}
void main() {
Shape circle = Circle(5.0);
Shape rectangle = Rectangle(10.0, 5.0);
Shape triangle = Triangle(3.0, 4.0);
print("Circle area: ${circle.area}");
print("Circle perimeter: ${circle.perimeter}");
print("Rectangle area: ${rectangle.area}");
print("Rectangle perimeter: ${rectangle.perimeter}");
print("Triangle area: ${triangle.area}");
print("Triangle perimeter: ${triangle.perimeter}");
}
在这个例子中, Shape 是一个抽象类, 它定义了面积和周长这两个抽象方法。Circle、Rectangle 和 Triangle 是派生类, 它们继承了 Shape 类的属性和方法, 同时还定义了自己的属性和方法。
总结
抽象类是面向对象编程中一个重要的概念, 它允许我们创建具有共同属性和方法的类, 同时还可以创建具有不同属性和方法的派生类。抽象类通过 abstract 关键字来定义, 派生类通过 extends 关键字来继承抽象类, 接口通过 implements 关键字来实现。抽象类在 Dart 中有广泛的运用, 它可以帮助我们构建更具灵活性和可重用的应用程序。