Рассмотрим иерархию классов примерно так:
- Существует один базовый класс,
BaseClass
- Существует множество производных классов от
BaseClass
, некоторые из которых реализуют различные интерфейсы
Так, например, есть класс DerivedClass
, который расширяет BaseClass
и реализует SomeInterface
.
Поскольку я имею дело со многими различными классами, которые все наследуются от BaseClass
, я решил, что буду хранить их объекты в контейнере, подобном List<BaseClass>
. Но тогда я не могу найти способ обнаружить интерфейс в этих объектах.
class SomeInterface {
String field;
}
abstract class BaseClass {
int count;
BaseClass(this.count);
}
class DerivedClass extends BaseClass implements SomeInterface {
String field;
DerivedClass(int count, this.field) : super(count);
}
void printField(SomeInterface obj) {
print(obj.field);
}
void main() {
BaseClass item = DerivedClass(4, 'test');
if (item is SomeInterface) { // Attempt one
print(item.field);
}
printField(item); // Attempt two
}
Раньше у меня было SomeInterface
в цепочке наследования, как у фактического суперкласса, но я бы хотел избежать этого, так как интерфейсы легче обрабатывать в моем случае. Что бы вы порекомендовали?