假设我有一些实体类层次结构,并且我有一个带有方法的util类,它获取上层类层次结构,并且必须根据我的特定类在另一个实体类(在前一个层次结构中)之间进行一些更改拿到 。 所以我将使用instanceof来查找我得到的具体对象。 但我知道 : 任何时候你发现你自己编写的形式的代码“如果对象是T1类型,那么做一些事情,但如果它是T2类型,那么做其他事情,”打自己。 那么如何在不使用instanceof的情况下实现呢?
请注意,我不想将util方法放在实体类中,因为我希望用户(实现程序员)能够实现该方法,但我不希望它们能够更改实体。
答案 0 :(得分:3)
而不是:
// BAD:
public void doStuff(Parent p) {
if (p instanceof Child1)
doThis();
else if (p instanceof Child2)
doThat();
else if …
}
这样做:
// GOOD:
public class Parent {
public void doIt();
}
public class Child1 extends Parent {
@Override
public void doIt() { /* the contents of doThis */ }
}
public class Child2 extends Parent {
@Override
public void doIt() { /* the contents of doThat */ }
}
public void doStuff(Parent p) {
p.doIt();
}
(代码可能不是100%正确(我的Java有点生疏)但我希望你明白这一点。)
这称为 多态 。
答案 1 :(得分:0)
方法重载是您可能想要查看的内容。