0

我有一个名为 Policy 的抽象类,以及两个子类 DepreciablePolicy 和 ExpirablePolicy 我有一个 Policy 数组,policies[]

我想检查我的对象在哪个子类中(如果它是 Policy、DepreciablePolicy 或 ExpirablePolicy)

我通过使用这个 if 语句来做到这一点。

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

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

4

2 回答 2

5

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

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

于 2013-02-14T02:07:18.803 回答
5

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

话虽如此,您可能正在寻找简单的向下转换:

DepreciablePolicy d = (DepreciablePolicy) policy;

不过,这只不过是糟糕的设计上的糟糕绷带。

于 2013-02-14T02:07:27.170 回答