我想创建从Rectangle类扩展的自定义矩形类。 我错了那个类Rectangle没有声明构造函数'Rectangle',我看过Rectangle类的源代码,并且有常量构造函数。 有可能吗?我认为可能的解决方案是使用组合而不是继承。谢谢你的回答。
part of Plot;
class PlotRectangle extends Rectangle{
// Rectangle<int> rectangle; // as variant use composition
String color = "red";
PlotRectangle(int left, int top, int width, int height): super.Rectangle(left, top, width, height){
}
PlotRectangle.withColor(int left, int top, int width, int height, this.color): super.Rectangle(left, top, width, height){
this.color = color;
}
void setColor(String color){
this.color = color;
}
}
答案 0 :(得分:2)
尝试了并且工作了
library x;
import 'dart:math';
class PlotRectangle<T extends num> extends Rectangle<T> {
PlotRectangle(T left, T top, T width, T height) : super(left, top, width, height);
String color = 'red';
factory PlotRectangle.fromPoints(Point<T> a, Point<T> b) {
T left = min(a.x, b.x);
T width = max(a.x, b.x) - left;
T top = min(a.y, b.y);
T height = max(a.y, b.y) - top;
return new PlotRectangle<T>(left, top, width, height);
}
PlotRectangle.withColor(T left, T top, T width, T height, this.color) : super(left, top, width, height);
@override
String toString() => '${super.toString()}, $color';
}
void main(List<String> args) {
var r = new PlotRectangle(17, 50, 30, 28);
print(r);
var rc = new PlotRectangle.withColor(17, 50, 30, 28, 'blue');
print(rc);
}
答案 1 :(得分:2)
正如Günter已经表明的那样,很有可能。
为了更具体一点,代码中的错误是对超级构造函数的调用:
super.Rectangle(left, top, width, height)
应为super(left, top, width, height)
。
您的语法尝试调用命名构造函数“Rectangle”,它等同于new Rectangle.Rectangle
- 构造函数不存在。您想调用“普通”构造函数(new Rectangle
),只需使用super
即可调用它。