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);
}