Классическая проблема полиморфизма.
Быстрое и грязное решение заключается в следующем: в цикле for
в классе Problem
добавьте эти строки
if (ind.genome[i] instanceof NetworkGene) {
fitness += ((NetworkGene) ind.genome[i]).x;
}
Но, вероятно, есть дизайнПроблема, которую нужно решить:
Почему ind.genome
является массивом VectorGenes вместо NetworkGenes?
Что означает x
?Есть ли что-то, что вы могли бы выразить в VectorGene
, например метод getSomeValue()
, который в NetworkGene
вы бы реализовали так, чтобы он возвращал x
(а в других подклассах вы бы реализовали это, чтобы вернуть какое-то другое подходящее значение)?
Действительно ли вам нужно отношение наследования между VectorGene
и NetworkGene
- связано ли это с некоторой разницей, которую вам действительно нужно использовать в проблеме, которую вы в настоящее время пытаетесь решить?Не могли бы вы просто иметь один класс, содержащий свойства x
и y
?