次の例では、mainがDogのsniff関数を呼び出すことが許可されています。犬ができることを正確に言うと、どういうわけかクライアントはより多くのことを知っていて、その特別な知識でオブジェクトにもっと多くのことをさせることができます-それはカプセル化リークだと思います. 一般的なケースで必ずしも死ぬことを望んでいるわけではありませんが、メソッドが存在する場合にのみメソッドが呼び出されるようにするフラグまたは実行方法はありますか。Dart エディターが警告を表示するため、言語が何かが間違っているという知識をサポートしていることを私は知っています: The method 'sniff' is not defined for the class 'Dog' . --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();
}