我有三节课。类A
(抽象类)是类B
和类C
的父级。
我需要一个可以同时容纳B
或C
对象的容器。
我试图这样做
ArrayList<A> myCollection = new ArrayList<A>();
然后
myCollection.add(b); //b is an instance of class B
我收到此错误:
类型ArrayList中的方法add(A)不适用于参数(B)
我可以在B
中存储类C
和ArrayList
的对象吗?或者我可以使用其他数据结构吗?
答案 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 ,然后有效......
考虑通过接口引用对象,你应该倾向于使用接口而不是类来引用对象,
如果你习惯使用接口作为类型,你的程序将是 更灵活。如果您决定要切换 实现,您所要做的就是更改类中的类名 构造函数(或使用不同的静态工厂)。