在以下示例中,允许main调用 Dog 上的嗅探函数,我希望它会以某种方式中断。如果我确切地说 Dog 可以做什么,但不知何故,客户端知道得更多,并且可以让对象利用这些特殊知识做更多事情——我认为这是封装泄漏。在一般情况下,我不一定希望它死掉,但是是否有一个标志或运行方式可以强制只调用存在的方法。我知道该语言支持错误的知识,因为 Dart 编辑器显示警告:未为类 'Dog' 定义方法 'sniff'。即使使用--checked标志运行,它也运行良好。
因此,假设测试调用了类似的代码。Dart 中是否有一个标志或某些代码导致它在测试运行时失败?
abstract class Dog {
void run();
void bark();
}
class BigDog implements Dog {
void run() => print("Big dog running");
void bark() => print("Woof");
void sniff() => print("Sniff");
}
main() {
Dog bd = new BigDog();
bd.run();
bd.bark();
bd.sniff();
}