如何创建可以在 Dart 的子类中重新定义的私有方法?

sni*_*tko 5 inheritance private-methods dart

每当我定义这样的私有方法时:

class ParentClass {

  sayHi() { _initiateGreeting(); }
  _initiateGreeting() { print("I'm a parent class"); }

}
Run Code Online (Sandbox Code Playgroud)

不可能在子类中重新定义它:

class ChildClass extends ParentClass {
  _initiateGreeting() { print("I'm a child class"); } // redefining the method
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建了一个 aChildClass和 callsayHi()方法的实例,那么ParentClass实际调用的是 a 中的私有方法:

var child = new ChildClass();
child.sayHi(); // outputs "I'm a parent class"
Run Code Online (Sandbox Code Playgroud)

但是,如果_initiateGreeting()在任何地方都公开(即剥离了_),则child.sayHi()在输出中调用results I'm a child class

为什么?如何重新定义私有方法以便在子类中调用它?

Ale*_*uin 3

私人会员可以被视为图书馆会员。在库内部,带或不带前置下划线的成员之间没有区别。

因此,如果您位于同一个库中,您应该能够在子类中重新定义该方法。