在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'
这是正常行为吗?如果是这样,如果有人解释其背后的理由,我将不胜感激。
答案 0 :(得分:2)
是的,没有静态成员的继承。见Static Methods section of the language specification:
静态方法的继承在Dart中几乎没用。静态方法无法覆盖。任何必需的静态函数都可以从其声明库中获得,并且不需要通过继承将其带入范围。经验表明,开发人员对于非实例方法的继承方法的想法感到困惑。
当然,静态方法的整个概念值得商榷,但这里保留了它,因为很多程序员都熟悉它。 Dart静态方法可以看作是封闭库的函数。