定義
有時候會需要這種情況:父類的某個方法定義了形參的類型,而子類想把這個方法的形參類型范圍縮小至父類定義的類型的某個子類,這種情況下,如果直接修改是無法通過編譯的,這就需要covariant關(guān)鍵字登場了。
例子
abstract class Creature{
String name;
Creature(this.name);
}
abstract class Animal extends Creature{
Animal(String name) : super(name ?? "動物");
void eat(covariant Creature target);
}
abstract class Plant extends Creature{
Plant(String name) : super(name ?? "植物");
}
class Rabbit extends Animal{
Rabbit(): super("兔子");
@override
void eat(Plant target) {
print("$name吃掉了t${target.name}");
}
}
上面例子中,標(biāo)記了covariant關(guān)鍵字的形參類型可以被子類收縮