检查对象所在的子类,然后在该子类中运行一个方法 - Java

时间:2013-02-14 02:04:57

标签: java abstract

我有一个名为Policy的抽象类,以及两个子类DepreciablePolicy和ExpirablePolicy 我有一系列政策,政策[]

我想检查我的对象所在的子类(如果它是Policy,DepreciablePolicy或ExpirablePolicy)

我是通过使用这个if语句来完成的。

if (this.policies[polNum] instanceof DepreciablePolicy){

对于每种类型的子类,我必须运行不同的方法。 唯一的问题是我只能使用Policy方法,而不能使用子类方法或构造函数。 有没有办法可以做到这一点?

2 个答案:

答案 0 :(得分:5)

  

对于每种类型的子类,我必须运行不同的方法。

然后你错误地设计了它。在Policy中定义一个抽象方法,让所有派生类根据自己的要求实现它。然后调用方法。

答案 1 :(得分:5)

这是继承以错误的方式完成的。多态性的全部意义在于您的代码不关心对象的子类。你需要做的任何事情都应该通过政策来表达,这应该是一个界面。您的代码应该与基于该接口的Policy进行交互,子类选择如何做出反应。

话虽如此,你可能正在寻找简单的下线:

DepreciablePolicy d = (DepreciablePolicy) policy;
然而,这并不比一个糟糕设计的可怜绷带更好。