class Shape {
String color;
void draw() {
print('Draw Random Shape');
}
}
class Rectangle implements Shape {
@override
void draw() {
print('Draw Rectangle');
}
}
现在的问题是我收到警告说
缺少getter Shape.color和setter的具体实现 Shape.color
我知道dart中的每个实例变量都隐式地有自己的getter和setter。但是在使用接口的情况下,我该如何解决此问题。我也尝试着研究一下stackoverflow上的一些类似问题,但它们没有帮助。
答案 0 :(得分:4)
Dart不会从implements Shape
继承实现,而仅声明Rectangle
符合Shape
的接口。
您需要将String color;
添加到Rectangle
才能满足implements Shape
。
您可以通过添加字段,或者添加getter和setter来实现。从类的界面角度来看,两者都是等效的。
class Rectangle implements Shape {
String color;
@override
void draw() {
print('Draw Rectangle');
}
}
或
class Rectangle implements Shape {
String _color;
String get color => _color;
set color(String value) => _color = value;
@override
void draw() {
print('Draw Rectangle');
}
}
如果getter和setter只转发到没有其他代码的私有字段,则后者被认为是较差的样式。
答案 1 :(得分:0)
或者也许您只想extends
,而不需要implements
?
您可以将代码更改为此吗?
import 'package:meta/meta.dart';
abstract class Shape {
String color;
Shape({
@required this.color
});
void draw() {
print('Draw Random Shape');
}
}
class Rectangle extends Shape {
Rectangle() : super(
color: "#ff00ff"
);
@override
void draw() {
print('Draw Rectangle');
}
}
希望有帮助