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

如何在java列表中使用继承?

如何在java列表中使用继承?,java,inheritance,Java,Inheritance,我想继承一个DAG类,它包含一个节点的ArrayList。为了继承ArrayList,我使用了ArrayList您的ArrayList属于泛型类型,它继承自Node,而不是Node,但是您向它添加了一个节点,该节点可能是错误的类型-这会导致编译错误,因为此操作可能不安全。(见答案末尾的解释) 处理它的一种方法是将ArrayList声明为ArrayList,而不是ArrayList,您需要了解在您的示例中我会做什么: public class DAG { ArrayList<Nod

我想继承一个DAG类,它包含一个节点的ArrayList。为了继承ArrayList,我使用了
ArrayList您的
ArrayList
属于泛型类型,它继承自
Node
,而不是
Node
,但是您向它添加了一个
节点,该节点可能是错误的类型-这会导致编译错误,因为此操作可能不安全。(见答案末尾的解释)


处理它的一种方法是将
ArrayList
声明为
ArrayList
,而不是
ArrayList,您需要了解在您的示例中我会做什么:

public class DAG { 
    ArrayList<Node> nodes;
    Node root;

    public DAG(Node root) {
        // ..
    }
}
公共类DAG{
阵列列表节点;
节根;
公共DAG(节点根){
// ..
}
}

这样,
节点
可以包含类型为
节点
的对象,并且继承自
节点
的任何类型都不包括快照,只需粘贴代码和格式(4-空格缩进)。(1)放入实际代码,而不是“快照”。(2)
但我仍然无法编译我的代码
为什么?如果您使用通配符作为
列表的泛型类型
,则无法添加到它,因为编译器无法知道您添加的内容是否与通配符匹配。所以不要使用通配符。我使用了通用ArrayList,因为ArrayList和ArrayList不相等,在我之前提出的一个问题中,有人建议使用通用ArrayList,但它仍然存在问题。没有使用ArrayList和ArrayList@amirveyseh然后,您可能希望使该类成为泛型类。请参见编辑。“您的ArrayList是从节点继承的泛型类型,而不是从节点继承,但您向其添加了一个节点,”。。。我甚至无法理解这意味着什么。在这么多层面上,这似乎很奇怪。
public class DAG <T extends Node> { 
   ArrayList<T> nodes;
   T root;

   public DAG(T root) {
      /...
   }
}
public static class A { 

}
public static class B extends A { 

}
public static class C extends A { 

}
public static <T extends A> void foo(ArrayList<T> arr, A a) {
    arr.add(a); //this fails at compilation

}
public static void main(String[] args) throws Exception {
    ArrayList<B> arr = new ArrayList<>();
    foo(arr, new C());
    B b = arr.get(0);

}
class A { 

}

class B extends A { 

}

class C extends A { 

}


List<T extends A> nodes = new ArrayList<>();
B b = new B();
C c = new C();
nodes.add(b);
nodes.add(c);
public class DAG { 
    ArrayList<Node> nodes;
    Node root;

    public DAG(Node root) {
        // ..
    }
}