最初我有一个设计问题,我需要一个超类的五个子类,除了两个之外,所有子类都使用相同的通用方法,另外两个类需要特殊处理。我想避免将方法写五次;两个特殊情况和三个相同的情况。
所以我让每个类都继承 SuperClass 及其 doSomething() 方法,并让 SubClassSpecial1 和 SubClassSpecial2 用他们自己的 doSomeThing 方法覆盖。
这一切都很好,直到我写了一个看起来像的方法
void fooBar(SuperClass obj) {
obj.doSomething()
}
它可以称为fooBar( new SubClassSpecial1() );
问题是obj
变量的运行时类现在是它的超类的,因此它将调用超类中定义的方法。当然,我可以在超类中创建一个抽象的 doSometing() 方法,并让每个子类实现自己的版本,但这会在三个类中重复代码。我想避免这样做......
如果我有很多分支,我将失去多态性所带来的任何收益
if(obj.getClass().getName() == "SubClassSpecial1" ) ((SubClassSpecial1) obj).doSomething()K;
else if ...
那么我应该怎么做才能使设计更加优雅和不老套呢?