变量不是继承的?

时间:2013-04-07 08:25:46

标签: dart

请考虑以下代码:

abstract class ClassAbstract {
    static int _someValue = 10;

    ClassAbstract() {}   
  }

  class NormalClass extends ClassAbstract {
    NormalClass(): super() {}

    void RunMe() {
      print("Value from abstract super: $_someValue");  // Error here
    }
  }


  void main() {
    NormalClass normalClass = new NormalClass();
    normalClass.RunMe();
    print("Application close");
  }

当我运行时,我收到一个错误:

Class 'NormalClass' has no instance getter '_someValue@0x213da713'.

NoSuchMethodError : method not found: '_someValue@0x213da713'
Receiver: Instance of 'NormalClass'
Arguments: []

也许我在这里弄错了,但是必须继承全局的静态变量,但是从这个例子可以看出它没有......

1 个答案:

答案 0 :(得分:2)

静态成员确实在Dart中继承 。如果要在声明类之外访问它们,则始终必须使用类名限定访问权限。

在你的情况下:

class NormalClass extends ClassAbstract {
  void runMe() {
    print("Value from abstract super: ${ClassAbstract._someValue}");
  }
}

规范在第7.7章(非规范性部分)中有几句话要说:

  

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

     

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