日期:2014-05-20  浏览次数:20746 次

关于子类转换的疑问
有一个标准的父类:A
有两个子类,都继承父类A,名字分别叫:B,C
B,C都扩展了一个方法,叫function1(),处理不一样但是名字一样。(父类A中没有这个方法,而且父类是标准类,不可修改)
现在的需要是,根据不同的条件,分别去调用B或C,但是他们做的处理却是完全一样的。
伪代码如下:
A   obj   =   instance;
if   ( "employee ".equals(input))
{
    ((B)obj).function1();//1
    ...
}
else
{
    ((C)obj).function1();//2
    ...
}

"1 "处与 "2 "处编写的代码完全一致,只是要把他们转成不同的子类.
若是这种非常类似的代码写两遍,觉得太傻了,有没有什么好的方法,使这段代码写一遍就可以了.谢谢.

------解决方案--------------------
可不可以这样做:
一个虚基类D继承自A,包含方法function1();
然后B,C继承D,重写方法function1();
D obj = instance;
obj.function1();

偶也是菜鸟,不知这样是否可行
------解决方案--------------------
可以把你的A类变成抽象类吗?
如果可以的话,把A类变成抽象类,在A中添加抽象方法 abstract function1();然后在B,C中实现他们。
调用时如下:
void functionName(A a){
a.function();
}
------解决方案--------------------
这个需要具体情况具体分析

A类不可改动, 但又不完全符合你的接口要求, 所以这里最好给A来一个Adapter D

D里面定义你需要的接口, 大部分功能转发给A解决

B, C然后继承D就可以了, D再应用Template Pattern, 由具体子类B, C实现function

------------------------
最近Head first Design Pattern看多了, 搞得言必谈模式, 勿怪!