![](/img/trans.png)
[英]Object ArrayList within Object ArrayList extended by class java
[英]ArrayList ClassCastException with extended object
我不知道该标题的确切发音,但这是问题所在
我有一个对象B的ArrayList
对象B扩展对象A
我想将对象A的元素添加到ArrayList
。 我觉得我应该能够这样做,因为对象A是对象B的简单版本(或者我应该说对象B是对象A的子集)
但是我得到ClassCastException
,同时将扩展对象保留为单独对象的解决方案是什么?
正如Liskov替代原则所指出的:
在计算机程序中,如果S是T的子类型,则可以将T类型的对象替换为S类型的对象。
这意味着如果您有:
class Animal {}
class Dog extends Animal {}
这样做很有意义:
Animal animal = new Dog();
但是这样做是错误的:
Dog dog = new Animal();
这正是您在做什么。 您可能想要实现的目标是:
List<Animal> list = new ArrayList<Animal>();
list.add(new Animal());
list.add(new Dog());
如果有一个ArrayList<B>
中,可以添加任何B
秒和亚类B
。 但是您不能添加A
因为A
不是B
子类。
如果要混合A
和B
,请尝试ArrayList<A>
。 您可以在此处添加两者,因为B
是A
子类。 使用多态时,请始终以最通用的类作为参数声明通用数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.