【发布时间】:2021-01-28 17:31:10
【问题描述】:
我创建了一个小例子。假设我有两个类:
public class Neuron {
ArrayList<Neuron> neighbours = new ArrayList<>();
int value = 1;
public Neuron() {
}
public void connect(ArrayList<Neuron> directNeighbours) {
for (Neuron node : directNeighbours) {
this.neighbours.add(node);
}
}
}
还有一个继承自 Neuron 的类:
public class SpecialNeuron extends Neuron {
int value = 2;
public SpecialNeuron() {
}
}
在我的情况下,我想要继承以避免很多“如果对象是特殊的做某事”的东西。但是,当我打电话时:
public static void main(String[] args) {
ArrayList<Neuron> neurons = new ArrayList<>();
Neuron a = new Neuron();
Neuron b = new Neuron();
Neuron c = new Neuron();
neurons.add(b);
neurons.add(c);
a.connect(neurons);
ArrayList<SpecialNeuron> special = new ArrayList<>();
SpecialNeuron d = new SpecialNeuron();
SpecialNeuron e = new SpecialNeuron();
special.add(d);
special.add(e);
a.connect(special); //Error
}
不能将 List(SpecialNeuron) 用于 List(Neuron) 参数。这个电话有什么问题,有没有合适的方法来解决这个问题? 此外,我可以做
ArrayList<Neuron> special = new ArrayList<>();
Neuron d = new SpecialNeuron();
Neuron e = new SpecialNeuron();
special.add(d);
special.add(e);
a.connect(special); //works fine
有效,但拒绝使用 SpecialNeuron 类中的函数。
【问题讨论】:
-
您必须将特定的 SpecialNeurons 从 Neuron 转换到该类,或者使用您在类 SpecialNeuron 中覆盖的所有神经元通用的方法。多态性会为你调用正确的版本。
-
@Jems 我在 Neuron 类中实现了空方法,这些方法将在 Special Neuron 类中被覆盖。由于多态性,它使我能够调用方法。感谢您的想法:)
-
我是否应该删除这个问题,因为我似乎无法确定具体的解决方案而不是解决方法?
标签: java list inheritance