Dart中似乎有一些特殊的类,例如num
,通常不能由用户定义的类继承,尽管Dart语法本身没有任何阻止它的类(例如Java的final
或C#的sealed
)。 num
由内置的int
和double
继承。
最佳答案
这是odt_a上Dart Team的类似问题的官方答案。
吉拉德·布拉查(Gilad Bracha)在此场合表示:
您几乎可以将int,double,bool,Null和String视为Java中的最终类(num不适合该模具,因为它具有子类型)。根据设计,我们不支持最终类,以最大程度地减少复杂性并避免无法子类化的代码(就像提交者想要的那样)。我们选择了不能扩展的类型列表,而不是最终的类。
原因:因为这些对于效率至关重要。这不是一个非常纯粹的论据,但实用的是,大多数人会以灵活性换取更快的系统。
++++++++
RE:来自我的评论:这确实不是一个很纯粹的论点,因为这最终无助于使语言更清晰,更好。
++++++++
同样,这不是脱离上下文的说法,但这是2012年6月29日的官方立场。
也许今天Dart团队有另一种解释,但只有在对提出的问题进行正式答复后才能使用。
附言
感谢Ringtaff以获取此答案的链接。
附言
如果您想使Dart语言更清晰,更好,请在此官方立场上留下您的评论。
后记:
关于compiler-construction - 为什么Dart中有特殊的 “sealed”类,我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20882376/