Dart 通过继承错误地推断类型。
Dart 类型推断无法与继承和字段覆盖一起正常工作。
如果我们没有显式地写
final Dog pet = Dog();
(重复),分析器会认为 pet
是 Animal
。 (这并没有错,但是有问题,应该是Dog
)
class Animal {}
class Dog extends Animal {
void bark() {
print("Daawg!");
}
}
abstract class Owner {
Animal get pet;
}
class DogOwner extends Owner {
@override
final pet = Dog();
}
void main() {
final dog = Dog();
dog.bark(); // pass
final owner = DogOwner();
owner.pet.bark(); // error. Why ??
}
这是 Dart 中的错误还是有意为之?我很好奇为什么要这样做。
只需在您的代码中添加这一行..
class DogOwner extends Owner { @override final Dog pet = Dog(); // you need specify Dog type or you can add var }