美文网首页
关键字covariant

关键字covariant

作者: 怀念小兔 | 来源:发表于2019-04-10 11:17 被阅读0次

    定义

    有时候会需要这种情况:父类的某个方法定义了形参的类型,而子类想把这个方法的形参类型范围缩小至父类定义的类型的某个子类,这种情况下,如果直接修改是无法通过编译的,这就需要covariant关键字登场了。

    例子

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

    上面例子中,标记了covariant关键字的形参类型可以被子类收缩

    相关文章

      网友评论

          本文标题:关键字covariant

          本文链接:https://www.haomeiwen.com/subject/kdfniqtx.html