Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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_Generics_Inheritance_Collections - Fatal编程技术网

Java 实例化基类的扩展时出现问题

Java 实例化基类的扩展时出现问题,java,generics,inheritance,collections,Java,Generics,Inheritance,Collections,我有一个空的抽象基类: public abstract class base{ } 和两个扩展它的类: public class a extends base{} public class b extends base{} 在另一个类中,我引用了它: public class it { List<base> list; list = new ArrayList<a>; //getting an error above. // I

我有一个空的抽象基类:

public abstract class base{ }
和两个扩展它的类:

public class a extends base{}
public class b extends base{}
在另一个类中,我引用了它:

public class it {

    List<base> list;
    list = new ArrayList<a>; 

    //getting an error above.
    // I thought I could do this?
}
公共类it{
名单;
列表=新的ArrayList;
//获取上面的错误。
//我以为我能做到?
}

我应该试试什么?我试图得到一个基类的列表。然后根据具体情况,创建两个扩展类的列表。

您可以这样创建列表:

list = new ArrayList<base>(); 
Java教程中的
列表
列表。

列表
列表
和不同类型。他们没有继承关系

但你可以这样声明:

List<? extends base> list;

list = new ArrayList<a>
List<b> getBList(){

  if (baseList instanceof b ){
      return (List<b>) baseList<base>;
  }
  else return null;

}

List此代码不起作用的原因是,虽然所有
a
实例都是
base
实例,但并非所有
base
实例都是
a
实例(例如
b

具体而言,
List
意味着您可以将
a
b
实例添加到列表中:

List<base> bases = new ArrayList<base>();
bases.add(new a());
bases.add(new b());

添加
b
就是将其添加到只应接受
a
实例的内容中。因此,Java通过禁止编译该语句来防止这种情况的发生。

如果我想这样做怎么办:

List<? extends base> list;

list = new ArrayList<a>
List<b> getBList(){

  if (baseList instanceof b ){
      return (List<b>) baseList<base>;
  }
  else return null;

}
List getBList(){
if(b的基本列表实例){
返回(列表)基本列表;
}
否则返回null;
}

请遵守Java命名约定:类以大写字母开头。下面的答案是这样的,只需将类名与大写字母放在一起即可。公共阶级基础。公共A类扩展基础。。。这是一个很小的问题,但是坚持传统是一个很大的帮助。这很好地回答了这个问题。ArrayList(对我越来越有用)和泛型值得一读。
List<b> getBList(){

  if (baseList instanceof b ){
      return (List<b>) baseList<base>;
  }
  else return null;

}