abstract class Base {
Base() {
loadDefaults();
}
Base.uninitialized();
void loadDefaults() {}
Map _values = {};
operator [](String key) => _values[key];
}
class A extends Base {
A() : super();
A.uninitialized() : super.uninitialized();
@override
void loadDefaults() {
_values.addAll(_defaults); // <=== loads g, h, i j instead of a, b, c, d ====|
super.loadDefaults();
}
Map _defaults = {'a':'aVal', 'b': 'bVal', 'c': 'cVal', 'd': 'dVal'};
}
class B extends A {
B() : super();
B.uninitialized() : super.uninitialized();
@override
void loadDefaults() {
_values.addAll(_defaults);
super.loadDefaults();
}
Map _defaults = {'g': 'gVal', 'h': 'hVal', 'i': 'iVal', 'j': 'jVal'};
}
void main(args) {
B settings = new B();
print(settings['b']); // should print 'bVal'
print(settings['g']); // prints 'gVal'
}
当我在自己的库中移动每个类时,子类的字段_defaults
不再可见,并且它可以根据需要工作。
(我必须将operator []
和字段_v
添加到每个类中以使其工作,但在此用例中这很好)
当覆盖当前类并且子类位于同一个库中时,有没有办法访问当前类中的字段?
答案 0 :(得分:2)
这可以检索属性内容,因为您可以调用重写方法。 但它只能从超级&#39;例如,因为在这个&#39;一切都被取代了。
所以在你的情况下,我已经用父_default attr替换了新的_default attr。
我不知道它对你来说是否足够,但它可以按照你的需要运作。
class B extends A {
B() : super();
B.uninitialized() : super.uninitialized();
@override
void loadDefaults() {
_values.addAll(this._defaults);
this._defaults = super._defaults;
super.loadDefaults();
}
Map _defaults = {'g': 'gVal', 'h': 'hVal', 'i': 'iVal', 'j': 'jVal'};
}