请考虑以下代码:
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: []
也许我在这里弄错了,但是必须继承全局的静态变量,但是从这个例子可以看出它没有......
答案 0 :(得分:2)
静态成员确实在Dart中继承 。如果要在声明类之外访问它们,则始终必须使用类名限定访问权限。
在你的情况下:
class NormalClass extends ClassAbstract {
void runMe() {
print("Value from abstract super: ${ClassAbstract._someValue}");
}
}
规范在第7.7章(非规范性部分)中有几句话要说:
静态方法的继承在Dart中几乎没用。静态方法无法覆盖。任何必需的静态函数都可以从其声明库中获得,并且不需要通过继承将其带入范围。经验表明,开发人员对于非实例方法的继承方法的想法感到困惑。
当然,静态方法的整个概念值得商榷,但这里保留了它,因为很多程序员都熟悉它。 Dart静态方法可以看作是封闭库的函数。