我有一个名为Policy的抽象类,以及两个子类DepreciablePolicy和ExpirablePolicy 我有一系列政策,政策[]
我想检查我的对象所在的子类(如果它是Policy,DepreciablePolicy或ExpirablePolicy)
我是通过使用这个if语句来完成的。
if (this.policies[polNum] instanceof DepreciablePolicy){
对于每种类型的子类,我必须运行不同的方法。 唯一的问题是我只能使用Policy方法,而不能使用子类方法或构造函数。 有没有办法可以做到这一点?
答案 0 :(得分:5)
对于每种类型的子类,我必须运行不同的方法。
然后你错误地设计了它。在Policy中定义一个抽象方法,让所有派生类根据自己的要求实现它。然后调用方法。
答案 1 :(得分:5)
这是继承以错误的方式完成的。多态性的全部意义在于您的代码不关心对象的子类。你需要做的任何事情都应该通过政策来表达,这应该是一个界面。您的代码应该与基于该接口的Policy进行交互,子类选择如何做出反应。
话虽如此,你可能正在寻找简单的下线:
DepreciablePolicy d = (DepreciablePolicy) policy;
然而,这并不比一个糟糕设计的可怜绷带更好。