加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Dart中的抽象基类

发布时间:2020-12-15 05:18:22 所属栏目:Java 来源:网络整理
导读:我已经用 Java编程了将近两年,但我现在更多地转向Web编程,因此转向 Javascript,或者我的情况转向Dart.对于我正在研究的项目,我希望有抽象基类,就像我在Java中一样.我一直在网上看,但我在Dart的抽象课上找不到任何东西.我只找到了 this article from the dart
我已经用 Java编程了将近两年,但我现在更多地转向Web编程,因此转向 Javascript,或者我的情况转向Dart.对于我正在研究的项目,我希望有抽象基类,就像我在Java中一样.我一直在网上看,但我在Dart的抽象课上找不到任何东西.我只找到了 this article from the dartlang site on mixins,在一个例子中,它使用了一个类的abstract关键字.但我真的不了解mixins原理.

有人可以将这个简单的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();

解决方法

实际上它在飞镖中变得更简单( 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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读