返回

面向对象中的 Dart 抽象类abstract、extends、implements

前端

什么是抽象类?

抽象类是一种特殊的类, 它只用于创建派生类, 但不能用于创建对象。抽象类通常定义了成员变量和成员函数, 这些成员变量和成员函数可以被派生类继承和使用。抽象类中可能包含抽象方法, 这些方法没有具体实现, 必须由派生类来实现。

**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 中有广泛的运用, 它可以帮助我们构建更具灵活性和可重用的应用程序。