【发布时间】:2017-05-29 16:11:43
【问题描述】:
我有一个列表定义为
List<ParentClass> parentClassList;
父类是抽象的,所以当我向列表添加元素时,我会做类似的事情
parentClassList.add(new ChildClassOne(...));
parentClassList.add(new ChildClassTwo(...));
等等...我现在实际上有 5 个子类。
我想做的是调用另一个类中的方法,覆盖它的参数,所以:
public void doSomething(ChildClassOne arg) {...}
public void doSomething(ChildClassTwo arg) {...}
但是如果List的类型是父类我就不行了
doSomething(parentClassList.get(0));
基本上我需要根据孩子的类型执行不同的操作,并且我需要访问特定孩子内部的所有方法。不同的孩子有不同的方法,他们只有一个共同的方法。
【问题讨论】:
-
代替
doSomething(ChildClassOne arg),使用parentClass.doSomething(),并在每个子类中覆盖doSomething()。这就是多态的原理。 -
基本上泛型不是协变的。您不能更改泛型参数的类型。你必须把
ParentClass拿出来,因为那是你所说的,你不能改变它。 -
“覆盖”是什么意思?
标签: java oop design-patterns