如何从抽象类调用子类方法?

时间:2019-08-04 10:05:19

标签: java arrays casting abstract-class

我想要一个包含抽象类(Neuron)的数组,其中填充了不同的子类(InputNeuronWorkingNeuron)。像这样:

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

0 个答案:

没有答案