【发布时间】:2011-09-26 14:44:58
【问题描述】:
我有 3 个班级:**Parent**、**Child1** 和 **Child2**。 Child1 和 Child 2 都扩展了 Parent 并且它们**不能**被修改。
有一个类Action定义如下:
public class Action {
public static void perform(Parent p) {
if (p instanceof Child1) {
action((Child1)p);
}
else if (p instanceof Child2) {
action((Child2)p);
}
else {
action(p);
}
}
private static void action(Parent p) {
...
}
private static void action(Child1 c1) {
...
}
private static void action(Child2 c2) {
...
}
}
Parent p = new Child1();
Action.perform(p);
如果没有 instanceof 运算符,有没有办法获得与上述相同的行为?
======
(修改)
PS:Action.perform的给定参数类型是Parent,但它的值是Child1,所以我认为方法重载不起作用....
【问题讨论】:
-
但是如果那些
Parent,Child1,Child2类不能修改,我该如何实现访问者模式呢?
标签: java oop design-patterns