在Dart中,不继承静态变量的理由是什么?

时间:2013-11-26 11:26:52

标签: class types static 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'

这是正常行为吗?如果是这样,如果有人解释其背后的理由,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

  

静态方法的继承在Dart中几乎没用。静态方法无法覆盖。任何必需的静态函数都可以从其声明库中获得,并且不需要通过继承将其带入范围。经验表明,开发人员对于非实例方法的继承方法的想法感到困惑。

     

当然,静态方法的整个概念值得商榷,但这里保留了它,因为很多程序员都熟悉它。 Dart静态方法可以看作是封闭库的函数。