Почему метод суперкласса вызывается вместо подкласса? - PullRequest
1 голос
/ 01 октября 2009

У меня есть базовый класс 'node' с функцией-членом 'update ()'

теперь у меня есть другие классы, которые расширяют класс 'node' и переопределяют класс 'update'.

но все мои «узлы» хранятся в массиве (типа «узел») и все они получают «update'd» по очереди.

Проблема в том, что он вызывает обновление класса базового узла, а не мою функцию переопределения.

Что я делаю не так? (у меня есть @Override и функции с одинаковым именем, типом возврата и одинаковыми параметрами)

EDIT OMG Извините, я редактировал резервную копию файла. РАБОТАЕТ СЕЙЧАС Извините извините

Ответы [ 2 ]

0 голосов
/ 01 октября 2009

Вы должны объявить свой массив производного типа

Я понимаю, что у вас есть:

Node[] array = {new node1, new node2}

Вы должны иметь:

Node[] array = {new derived, derived} 

Ключевым вопросом проблемы является создание экземпляров объектов производного типа, но обработка их как узлов.

например

void foo (Node node){
  node.update()
}

bar(){
   foo (new Node())
   foo (new Derived())
}
0 голосов
/ 01 октября 2009

Попробуйте проверить подтип узла и приведение перед вызовом этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...