Всякий раз, когда я определяю частный метод, как это:Как создать частные методы, которые можно переопределить в подклассах в Dart?
class ParentClass {
sayHi() { _initiateGreeting(); }
_initiateGreeting() { print("I'm a parent class"); }
}
Это не представляется возможным переопределить его в подклассе:
class ChildClass {
_initiateGreeting() { print("I'm a child class"); } // redefining the method
}
Теперь, если я создаю экземпляр ChildClass
и вызвать sayHi()
метод, то это частный метод из ParentClass
, который на самом деле вызывается:
var child = new ChildClass();
child.sayHi(); // outputs "I'm a parent class"
Если howev er, _initiateGreeting()
становится общедоступным (то есть снимается с _
), а затем вызывается child.sayHi()
. Результаты выводятся I'm a child class
.
Почему? Как переопределить частный метод, чтобы он вызывался в подклассе?
Это интересно. Но что, если 'ParentClass' принадлежит библиотеке, то есть' '' '' '' оператора в верхней части файла, который содержит 'ParentClass', в то время как' ChildClass' не является частью этой библиотеки (что, по иронии судьбы , мое дело)? – snitko
Ожидается ли, что 'ChildClass' не расширит' ParentClass' в фрагменте кода? 'часть' не должна влиять на конфиденциальность. –
Я сделал несколько копаний, и похоже, что выражение 'part of' действительно влияет на возможность переопределения частного метода или нет: https://groups.google.com/a/dartlang.org/forum/#!msg/misc/ XZ0pqeqCeVs/j3QdGO_ZZmUJ – snitko