Как я могу получить значение члена данных из подкласса? Если у меня есть такие коды - PullRequest
0 голосов
/ 17 января 2019

Я все еще изучаю учебник по флаттеру / дартсу. Это мой код Я создаю метод, который может возвращать объект. Как получить элемент данных из подкласса с помощью метода.

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

как вы можете видеть, я могу получить значение площади, но я не могу получить значения радиуса или стороны из круга класса или квадрата класса, который является подклассом формы класса

1 Ответ

0 голосов
/ 17 января 2019

Это потому, что Shape не обладает этими свойствами. Вам нужно сначала привести к конкретному типу или сделать shapeFactory универсальным.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...