大佬教程收集整理的这篇文章主要介绍了继承对象列表 java,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个小例子。假设我有两个类:
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 类的函数。
您可以在通用 <? extends T>
中使用通配符。您可以阅读有关它的更多信息 here。
将您的方法参数更改为此。
public void connect(ArrayList<? extends Neuron> directNeighbours) {
for (Neuron node : directNeighbours) {
this.neighbours.add(nodE);
}
}
,
首先,您正在扩展 Neuron
类,但您并没有真正使用继承。您应该将 value
变量设为 protected
并在构造函数中设置其值。
public class Neuron {
protected int value;
public Neuron() {
this.value = 1;
}
}
public class SpecialNeuron extends Neuron {
public SpecialNeuron() {
this.value = 2;
}
}
现在,您的问题在第 17 行 - ArrayList<SpecialNeuron> special = new ArrayList<>();
- 您有 SpecialNeuron
对象列表,它们是 Neuron
类的子对象,因此 Java 知道它只包含类的对象SpecialNeuron
在您的 connect()
函数中,您只接受 Neuron
类对象,因此为了使其工作,@R_197_10245@ special
列表更改为:
ArrayList<Neuron> special = new ArrayList<>();
在此列表中,您可以添加 Neuron
和 SpecialNeuron
对象并将其用作 Neuron
对象的列表。
以上是大佬教程为你收集整理的继承对象列表 java全部内容,希望文章能够帮你解决继承对象列表 java所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。