我想要一个包含抽象类(Neuron
)的数组,其中填充了不同的子类(InputNeuron
,WorkingNeuron
)。像这样:
private Neuron[][] neurons;
public final int[] NETWORK_LAYER_SIZES;
public final int NETWORK_SIZE;
public Network(int... sizes) {
NETWORK_LAYER_SIZES = sizes;
NETWORK_SIZE = sizes.length;
neurons = new Neuron[NETWORK_SIZE][];
for(int layer = 0; layer < NETWORK_SIZE; layer++) {
neurons[layer] = new Neuron[NETWORK_LAYER_SIZES[layer]];
for(int neuron = 0; neuron < NETWORK_LAYER_SIZES[layer]; neuron++) {
if(layer == 0) {
neurons[layer][neuron] = new InputNeuron();
} else {
neurons[layer][neuron] = new WorkingNeuron();
}
}
}
}
现在我想使用addConnection(Connection c)
调用子类方法(例如WorkingNeuron
的{{1}})。像这样:
Neuron[]
问题是,抽象类for(int layer = 0; layer < NETWORK_SIZE; layer++) {
for(int neuron = 0; neuron < NETWORK_LAYER_SIZES[layer]; neuron++) {
neurons[layer][neuron].addConnection(new Connection());
}
}
没有实现方法Neuron
,而子类addConnection(Connection c)
实现了方法。
我知道我可以像这样将WorkingNeuron
投射到neurons[layer][neuron]
:
WorkingNeuron
但是我想知道是否有更好/更清洁的解决方案来解决这个问题。
编辑: 不能选择将((WorkingNeuron) neurons[layer][neuron]).addConnection(new Connection());
类实现为addConnection(Connection c)
类中的抽象方法,因为该方法仅适用于Neuron
,而不是WorkingNeuron
。