我已经使用Java编程将近两年,但现在更多地转向Web编程,因此是Javascript,或者在我的情况下是Dart。对于我正在工作的项目,我想要抽象基类,就像在Java中一样。我在互联网上寻找了一下,但是我找不到有关Dart抽象类的任何信息。我只找到了这篇来自dart lang网站的文章,介绍了在一个示例中使用抽象关键字的类。 但我真的不理解混入原则。
是否有人可以将这个简单的Java抽象基类示例翻译成Dart,以便我可以基本了解如何在Dart中进行操作?该示例涵盖了抽象基类(当然,包括抽象方法),多态,对象强制转换,方法重载(在这种情况下是构造函数),调用超级构造函数和调用超载自身构造函数。
// 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();