Предположим, что у меня есть два класса:Haxe - Как объявить переменную быть экземпляром родительского или дочернего класса
class PlayerManagerParent {
public function new(){
}
}
class GameManagerParent {
public var playerManager:PlayerManagerParent();
public function new(){
}
}
который я подклассы, как
class PlayerManagerChild extends PlayerManagerParent {
public function new(){
super();
}
public function someMethod(){
}
}
class GameManagerChild extends GameManagerParent {
public function new(){
super();
this.playerManager = new PlayerManagerChild();
}
}
Тогда я сделать экземпляр GameManagerChild
и хотите получить доступ к someMethod()
:
var gameManager:GameManagerChild = new GameManagerChild();
gameManager.playerManager.someMethod();
, который я, конечно, не может сделать, так как gameManager.playerManager
- тип playerManager:PlayerManagerParent
, который не определяет someMethod()
, а компилятор/typechecker дает мне ошибку.
Как я могу решить эту проблему без объявления someMethod()
в родительском классе, или установка playerManager
типа в Dynamic
(который был бы вариант, но тогда я не могу перебрать Iterable полей в playerManager
, например)?
Meh, ваш документирован больше :) – clemos
Ну, это частично решает мою проблему, но когда я пытаюсь сделать это в вашем примере Класс тестирования: 'var child2: GameManagerParent = child;', т работы. –
wildfireheart
Это правильно, но я думаю, что это тоже точно ожидается, потому что у родителя нет этой функции, верно? –