Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的集合可以容纳不同的子类吗?_Java_Collections_Abstract Class - Fatal编程技术网

Java中的集合可以容纳不同的子类吗?

Java中的集合可以容纳不同的子类吗?,java,collections,abstract-class,Java,Collections,Abstract Class,我有三节课。类A(抽象类)是类B和类C的父类 我需要一个可以同时容纳B或C对象的容器 我试着这么做 ArrayList<A> myCollection = new ArrayList<A>(); 我得到这个错误: 类型ArrayList中的方法add(A)不适用于参数(B) 是否有一种方法可以在我的ArrayList中存储类B和类C的对象?或者我可以使用其他数据结构吗?试试下面的代码: ArrayList<A> list = new ArrayList<

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

我需要一个可以同时容纳
B
C
对象的容器

我试着这么做

ArrayList<A> myCollection = new ArrayList<A>();
我得到这个错误:

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

是否有一种方法可以在我的
ArrayList
中存储类
B
和类
C
的对象?或者我可以使用其他数据结构吗?

试试下面的代码:

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

// Adding items
list.add(b);
list.add(c);
ArrayList list=new ArrayList();
B=新的B();
C=新的C();
//添加项目
列表.添加(b);
增加(c)项;
试试下面的代码:

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

// Adding items
list.add(b);
list.add(c);
ArrayList list=new ArrayList();
B=新的B();
C=新的C();
//添加项目
列表.添加(b);
增加(c)项;
您可以尝试:

 ArrayList<? extends A> myCollection = new ArrayList<>();
ArrayList您可以尝试:

 ArrayList<? extends A> myCollection = new ArrayList<>();
ArrayList是,请参见以下内容:

public class Fo {

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

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

}
公共类Fo{
静态类A{}
静态类B扩展了{}
静态空隙f(){
列表为=新的ArrayList();
as.add(新的B());
}
}
是,请参见以下内容:

public class Fo {

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

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

}
公共类Fo{
静态类A{}
静态类B扩展了{}
静态空隙f(){
列表为=新的ArrayList();
as.add(新的B());
}
}

是的,您可以列出超级类

List<A> l = new ArrayList<A>();
        l.add(new B());
        l.add(new C());
listl=newarraylist();
l、 添加(新B());
l、 添加(新C());
也就是说,100%正确,您有一个超类的列表,并且由于BC是类a的对象,因此是有效的


并考虑引用对象的接口,您应该赞成使用接口而不是类来引用对象,

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


是的,你可以列一个超级班级的名单

List<A> l = new ArrayList<A>();
        l.add(new B());
        l.add(new C());
listl=newarraylist();
l、 添加(新B());
l、 添加(新C());
也就是说,100%正确,您有一个超类的列表,并且由于BC是类a的对象,因此是有效的


并考虑引用对象的接口,您应该赞成使用接口而不是类来引用对象,

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


您确定复制的声明正确吗?没有泛型参数的纯ArrayList应接受任何对象引用。您是否阅读过有关泛型的内容?是否确实正确复制了声明?一个纯泛型列表,没有泛型参数,应该接受任何对象引用。你读过泛型的任何东西吗?并且考虑通过它们的接口引用对象,你应该赞成使用接口而不是类来引用对象,并考虑通过它们的接口引用对象。您应该赞成使用接口而不是类来引用对象,并考虑通过它们的接口引用对象,您应该赞成使用接口而不是类来引用对象,并考虑通过它们的接口引用对象,而应该使用接口而不是类来引用对象,