Java中的Collection可以包含不同的子类吗?

时间:2016-02-19 16:42:24

标签: java collections abstract-class

我有三节课。类A(抽象类)是类B和类C的父级。

我需要一个可以同时容纳BC对象的容器。

我试图这样做

ArrayList<A> myCollection = new ArrayList<A>();

然后

myCollection.add(b); //b is an instance of class B

我收到此错误:

  

类型ArrayList中的方法add(A)不适用于参数(B)

我可以在B中存储类CArrayList的对象吗?或者我可以使用其他数据结构吗?

4 个答案:

答案 0 :(得分:2)

是的,请看:

public class Fo {

  static class A{}
  static class B extends A{}

  static void f() {
    List<A> as = new ArrayList<A>();
    as.add(new B());
  }

}

答案 1 :(得分:1)

尝试下面的代码:

ArrayList<A> list = new ArrayList<>();
B b = new B();
C c = new C();

// Adding items
list.add(b);
list.add(c);

答案 2 :(得分:0)

你可以试试:

 ArrayList<? extends A> myCollection = new ArrayList<>();

答案 3 :(得分:0)

是的,你可以列出超级班。

List<A> l = new ArrayList<A>();
        l.add(new B());
        l.add(new C());

100 %正确,你有一个超类的列表,因为 B C 是该类的对象< strong> A ,然后有效......

考虑通过接口引用对象,你应该倾向于使用接口而不是类来引用对象,

  

如果你习惯使用接口作为类型,你的程序将是   更灵活。如果您决定要切换   实现,您所要做的就是更改类中的类名   构造函数(或使用不同的静态工厂)。