我已经用Java编程近两年了,但我现在更多地转向web编程,从而转向Javascript,或者在我的情况下转向Dart.对于我正在进行的一个项目,我希望有抽象基类,就像Java中一样.我一直在网上搜索,但在Dart的抽象类上找不到任何东西.我只找到了this article from the dart lang site on mixins个,在一个例子中,它对一个类使用了abstract关键字.但我真的不明白混合原理.

Could somebody translate this easy Java abstract base class example to Dart,这样我就可以对在DART中如何做有一个基本的了解?该示例涵盖abstract base class(当然,使用抽象方法)、polymorphismcasting objectsmethod overloading(在本例中是构造函数)、calling super-constructorcalling overloaded own constructor.

// Abstract base class
abstract class Vehicle {
    protected final int maxSpeed;
    protected int speed;
    
    Vehicle() {
        this(0);
    }
    
    Vehicle(int maxSpeed) {
        this.maxSpeed = maxSpeed;
        speed = 0;
    }
    
    public int getMaxSpeed() {
        return maxSpeed;
    }
    
    abstract void accelerate();
    abstract void brake();
}

// Subclass of Vehicle, the abstract baseclass
class Car extends Vehicle {
    public final int doors;
    
    Car(int maxSpeed, int doors) {
        super(maxSpeed);
        this.doors = doors;
    }
    
    @Override
    void accelerate() {
        if (speed>maxSpeed) {
            speed = maxSpeed;
            return;
        }
        speed += 2;
    }

    @Override
    void brake() {
        if (speed - 2 < 0) {
            speed = 0;
            return;
        }
        this.speed -= 2;
    }
}

那么这个简单的实现看起来会是什么样子呢?

// Polymorphism
Vehicle car = new Car(180, 4);

// Casting
int doors = ((Car)car).doors;

// Calling abstract method
car.accelerate();

推荐答案

实际上,在DART(https://dartpad.dartlang.org/37d12fa77834c1d8a172)中它确实变得更简单了

// Abstract base class
abstract class Vehicle {
  final int maxSpeed;
  int speed = 0;

  Vehicle([this.maxSpeed = 0]);

  void accelerate();
  void brake();
}

// Subclass of Vehicle, the abstract baseclass
class Car extends Vehicle {
  final int doors;

  Car(int maxSpeed, this.doors) : super(maxSpeed);

  @override
  void accelerate() {
    if (speed > maxSpeed) {
      speed = maxSpeed;
      return;
    }
    speed += 2;
  }

  @override
  void brake() {
    if (speed - 2 < 0) {
      speed = 0;
      return;
    }
    this.speed -= 2;
  }
}

main() {
  // Polymorphism
  Vehicle car = new Car(180, 4);

  // Casting
  int doors = (car as Car).doors;

  // Calling abstract method
  car.accelerate();
}

Dart相关问答推荐

从扩展类访问抽象类属性

Dart 中的const关键字放置有什么不同?

如何在flutter中管理switch小部件的原生外观

无法在 IOS 上使用 firebase 运行Flutter应用程序

在构建函数之外使用 BuildContext

StreamBuilder 会在无状态小部件中自动关闭流吗?

Flutter Dismissible 坚持必须从树中删除列表项

在Flatter中,依赖项必须指定版本号?

参数类型PointerEvent不能分配给参数类型PointerDownEvent

在 Dart 中向服务器发出多个独立请求的最佳方式

将ListTile图标向左对齐

如何正确管理 Flutter 应用中的全局 textScaleFactor?

Flutter DataTable - 点击行

如何平移和zoom 图像?

在 Dart 中实现观察者模式

Dart如何将逗号添加到字符串编号

dart中的max/mi int/double 值是否有常数?

使用 Dart 将 Uint8List 转换为字符串

Dart 有没有办法测量小代码的执行时间

如何在 Dart 中获取时间戳?