class Point { num x, y; //声明普通构造函数 Point() { print('我是默认的构造函数,实例化时,会第一个被调用'); this.x = 20; this.y = 30; } } void main() { var p = new Point(); print(p.x); }报错的原因
时间: 2024-02-05 12:03:28 浏览: 58
通过构造函数实例化对象的方法
该代码在 Dart 2.x 中是可以正常运行的,但是在 Dart 1.x 中会出现类似于以下的错误:
```
Error: 'Point' is already defined.
```
这是因为在 Dart 1.x 中,当你声明一个类时,它的构造函数和其他实例方法都必须在类的定义内部声明。如果你在类的定义内部声明了一个构造函数,并且尝试在类的外部再次声明一个同名的构造函数,就会出现上述错误。
如果你要在类的外部声明一个构造函数,你需要使用工厂构造函数。例如:
```
class Point {
num x, y;
Point();
factory Point.fromValues(num x, num y) {
var point = new Point();
point.x = x;
point.y = y;
return point;
}
}
void main() {
var p = new Point.fromValues(20, 30);
print(p.x);
}
```
这个例子中,我们定义了一个工厂构造函数 `Point.fromValues`,它可以在类的外部被调用。这个构造函数接受两个参数 `x` 和 `y`,并返回一个新的 `Point` 实例,该实例的 `x` 和 `y` 属性被设置为传入的参数值。
阅读全文