Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何从子类中获取数据成员的值?如果我有这样的代码_Oop_Dart - Fatal编程技术网

Oop 如何从子类中获取数据成员的值?如果我有这样的代码

Oop 如何从子类中获取数据成员的值?如果我有这样的代码,oop,dart,Oop,Dart,我还在学习颤振/飞镖语言教程。 这是我的密码。我创建了可以返回对象的方法。如何通过该方法从子类中获取数据成员 abstract class Shape{ get area; } class Circle implements Shape{ final radius; Circle(this.radius); get area=>pi*pow(radius,2); } class Square implements Shape{ final side; Squ

我还在学习颤振/飞镖语言教程。 这是我的密码。我创建了可以返回对象的方法。如何通过该方法从子类中获取数据成员

abstract class Shape{
  get area;
}
class Circle implements Shape{
  final radius; 
  Circle(this.radius);

   get area=>pi*pow(radius,2);
}

class Square implements Shape{
  final side;
  Square(this.side);
  get area=>pow(side,2);
}

Shape shapeFactory(String type){
  if(type=='circle') return Circle(2);
  if(type=='square') return Square(2);
  throw 'Can\'t create $type.';

}

void main() {
  var s=shapeFactory('square');
  print(s.area);
  print(s.side);
  var c= shapeFactory('circle');
  print(c.area);
  print(c.radius);
}
正如你所看到的,我可以得到面积值,但我不能从类圆形或类方形中得到半径或边值,这是类形状的子类,这是因为形状没有这些属性。您需要先强制转换为特定类型,或使shapeFactory成为泛型


这与Python有什么关系?我不知道它是否与Java或C相关,但我不能确定。不要只使用你能说的所有语言。这是一个错误,我希望得到更多人的关注。这样我可以得到更多答案,更多可能我以前不知道的信息。下次我会提出更好的问题。人们不喜欢有人因为他们不感兴趣的事情而引起他们的注意。如果你想引起注意,最好确保在清楚问题所在的地方张贴适当的问题。顺便说一句,你的问题很好。我忘了你还需要投。我添加为T.oh,我明白了,它是有效的。非常感谢Sir如果我使用这个算法T ShapeActoryString类型{iftype=='circle'返回Circle2;iftype=='square'返回Square2;抛出'Can'T create$type'。;}“T”是什么意思??它是代表shape类的子类还是什么?它就像一个类型的变量,而不是一个值的变量。调用shapeFactory T时,shapeFactoryString类型{变为方形shapeFactoryString类型{因此,我必须使用不同的名称创建另一个方法,但具有正确的数据类型?或者我可以执行重写吗?{不,我的答案在后面或显示了如何执行该操作。它使用类型参数T参数化shapeFactory。除此之外,无需任何其他操作。第一个算法运行良好,但当我尝试第二个算法时。我发现错误消息返回类型“C”ircle不是“t”,如方法“shapeFactory2”所定义。
void main() {
  var s=shapeFactory('square') as Square;
  print(s.area);
  print(s.side);
  var c= shapeFactory('circle') as Circle;
  print(c.area);
  print(c.radius);
}
T shapeFactory<T extends Shape>(String type){
  if(type=='circle') return Circle(2) as T;
  if(type=='square') return Square(2) as T;
  throw 'Can\'t create $type.';
}

void main() {
  var s=shapeFactory<Square>('square');
  print(s.area);
  print(s.side);
  var c= shapeFactory<Circle>('circle');
  print(c.area);
  print(c.radius);
}