首页 > 解决方案 > Dart 继承进度

问题描述

我是飞镖的新人。最近从研究中发现了一个问题。

我的代码如下:

class TwoD {
  double x, y;
  
  TwoD({ this.x, this.y });
  
  @override
  String toString() {
    return 'x: ${this.x}, y: ${this.y}';
  }
}

class ThreeD extends TwoD{
  double z;
  ThreeD({ x = 3, y, this.z }): super(x: x = 100.0, y: y);
  
  @override
  String toString() {
    return '${super.toString()}, z: ${this.z}';
  }
}

ThreeD point = ThreeD(x: 1.9, y: 2.0, z: 3.0);
  
void main() {
  print(point.x);
  print(point.y);
  print(point.z);
  print(point.toString());
}

ThreeD 子类中,我设置了一个默认的[我还不确定。] super.x的值,然后我发现我创建的所有实例的x值都是 100,我知道这是一个严重的错误,我想知道为什么要领导这个,或者有人可以教我扩展的进度吗?我已经阅读了飞镖的游览部分。

非常感谢你!祝你今天过得愉快!

标签: dart

解决方案


您的问题可以在以下示例中看到:

void main() {
  var x = 5;
  print(x = 10); // 10
  print(x);      // 10
}

因此,该语句x = 10将设置x为该值10,但同时返回该值,然后在此示例中10被拾取。print这样做的原因是它允许我们编写如下内容:

void main() {
  int x, y, z;
  x = y = z = 10;

  print(x); // 10
  print(y); // 10
  print(z); // 10
}

由于z = 10将返回10我们然后使用的y = 10然后用于的x = 10

您的问题是以下行:

ThreeD({ x = 3, y, this.z }): super(x: x = 100.0, y: y);

在这里,x = 100.0将返回100然后使用,x: 100.0所以我们将x参数设置super100.0.

至于修复,我真的需要知道原因,100.0但我最好的猜测是删除它,因为你已经定义了一个默认值,double x = 3所以如果x没有定义它会自动获取值3

ThreeD({double x = 3, double y, this.z}) : super(x: x, y: y);

推荐阅读