Whenever I define a private method like this:
class ParentClass {
sayHi() { _initiateGreeting(); }
_initiateGreeting() { print("I'm a parent class"); }
}
It is not possible to redefine it in a subclass:
class ChildClass extends ParentClass {
_initiateGreeting() { print("I'm a child class"); } // redefining the method
}
Now if I create an instance of a ChildClass
and call sayHi()
method, then it is the private method from a ParentClass
which actually gets called:
var child = new ChildClass();
child.sayHi(); // outputs "I'm a parent class"
If, however, _initiateGreeting()
is made public everywhere (that is, stripped off the _
) then calling child.sayHi()
results in the output I'm a child class
.
Why? How do I redefine a private method so that it gets called in a subclass?
Private member can be seen as library member. Inside a library there are no difference between members with or without a prepending underscore.
So if you're in the same library you should be able to redefined the method in subclass.