微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dart-函数需要“ Extended”类,但可以通过“ Base”类调用

如何解决Dart-函数需要“ Extended”类,但可以通过“ Base”类调用

我遇到了这个问题,想知道为什么Dart编译器会表现得如此。

Extended扩展了Base。因此,调用需要foo()对象的Base,可以处理Extended对象。

bar()需要一个Extended对象,因此显然不可能传递Base对象。

我希望这段代码无法编译。但是它似乎确实可以编译,除非我将Base()构造函数明确地放在bar()方法调用中。

这是什么原因?以及如何确保此类代码不会“意外”编译?

class Base {
  String hello = 'hello';
}

class Extended extends Base {
  String world = 'world';
}

void foo(Base obj) {
  print(obj.hello);
}

void bar(Extended obj) {
  print(obj.world);
}

void main() {
  Base base = Base();
  Extended extended = Extended();

  foo(extended); // works
  bar(extended); // works
  bar(base); // compiles,but throws TypeError upon invocation
  //bar(Base()); // does not compile
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。