程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了继承对象列表 java大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决继承对象列表 java?

开发过程中遇到继承对象列表 java的问题如何解决?下面主要结合日常开发的经验,给出你关于继承对象列表 java的解决方法建议,希望对你解决继承对象列表 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<>();

在此列表中,您可以添加 NeuronSpecialNeuron 对象并将其用作 Neuron 对象的列表。

大佬总结

以上是大佬教程为你收集整理的继承对象列表 java全部内容,希望文章能够帮你解决继承对象列表 java所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: