ArrayList and Polymorphism
本问题已经有最佳答案,请猛点这里访问。
如果有人能在这里指出问题和可能的解释,这将是非常有帮助的。
1 2 3 4 5 6 7 8 9 10 11 | class Parent{} public class ChildClass extends Parent{ /*Main class*/ public static void main(String[] args) { ArrayList<ChildClass> a3 = new ArrayList<ChildClass>(); foo(a3); } /*another function*/ static void foo(ArrayList<Parent> obj) { } |
这将引发以下编译错误。
1 | The method foo(ArrayList<Parent>) in the type ChildClass is not applicable for the arguments (ArrayList<ChildClass>) |
多态性规则应该允许我这样做。正确的?毕竟,儿童班是家长。有什么问题吗?
1 2 3 4 5 6 7 8 9 | ArrayList<ChildClass> a3 = new ArrayList<>(); foo(a3); ChildClass c = a3.get(0); ... static void foo(ArrayList<Parent> obj) { obj.add(new Parent()); } |
如果上述代码编译时没有出错,那么它将是类型不安全的,并且在运行时使用
因此,对于关系"
一般来说,只有当