dart - 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,我知道这是一个严重的错误,我想知道为什么要领导这个,或者有人可以教我扩展的进度吗?我已经阅读了飞镖的游览部分。
非常感谢你!祝你今天过得愉快!
解决方案
您的问题可以在以下示例中看到:
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
参数设置super
为100.0
.
至于修复,我真的需要知道原因,100.0
但我最好的猜测是删除它,因为你已经定义了一个默认值,double x = 3
所以如果x
没有定义它会自动获取值3
:
ThreeD({double x = 3, double y, this.z}) : super(x: x, y: y);
推荐阅读
- jquery - 剑道网格问题。确认消息未更新
- python - RStudio 中的 Keras/Tensorflow 未在 Miniconda 环境中引用 Python
- oauth-2.0 - 社交登录概念和最佳实践
- javascript - 异步等待javascript
- swift - 如何从 Swift 调用私有 macOS CoreFoundation 函数
- java - 我如何执行回滚插入和删除语句
- julia - Julia: How to pretty print an array?
- python-3.x - 使用 DjangoPaypal 进行订阅不起作用
- javascript - 如何修复低选择2显示
- java - 更新后无法取消通知