2013-11-26 40 views
1

Dart中,如果一个类扩展了另一个类,扩展类将继承所有超类非静态变量,但不会继承其任何静态变量。在Dart中,不继承静态变量的原理是什么?

例如

class TestUpper { 
    static final String up = 'super'; 
    String upup = 10; 
} 

class TestLower extends TestUpper { 
    static final String low = 'lower'; 
    String lowlow = 11; 
} 

var lower = new TestLower(); 
print(lower.lowlow); // <== 11 
print(lower.upup); // <== 10 
print(TestLower.low); // <== "lower" 
print(TestLower.up); // <== No static getter 'get:up' declared in class 'TestLower' 

这是正常的行为呢?如果是这样,我会很感激,如果有人解释它背后的理由。

回答

2

是的,没有静态成员的继承。见Static Methods section of the language specification

的静态方法继承有飞镖的小工具。静态方法不能被覆盖。任何必需的静态函数都可以从其声明库中获得,并且不需要通过继承将其带入范围。经验表明开发人员对于不是实例方法的继承方法的想法感到困惑。

当然,静态方法的整个概念是值得商榷的,但在这里保留,因为这么多的程序员都熟悉它。 Dart静态方法可能被视为封闭库的功能。

+0

我看的理由,但不同意。如果你在扩展类中暴露超类,应该暴露超类。在没有反思的情况下工作时,我可以看到不必要的地方 - 只需查看代码即可! - 但是当一般地处理类时,非继承是一个真正的痛苦。 –

+0

随意张贴在[镖杂项组]您的反馈(https://groups.google.com/a/dartlang.org/forum/#!forum/misc)。 –

+0

已经这么做了 - 再次感谢! –