dim*_*uta 0 java oop inheritance
我有一个超类,比方说BaseClass和两个子类,比如说SubclassA和SubclassB,它们之间没有任何其他关系,只有它们的父类.
在我的代码中的很多地方我需要调用子类都有但不是父类的方法......我发现自己重复了很多代码,看起来像:
if (obj instanceof SubclassA) {
// stuff
} else if (obj instanceof SubclassB) {
// same stuff
}
Run Code Online (Sandbox Code Playgroud)
第一个想法应该是将"stuff"放入超类中的方法中,但我不能,因为该超类是其他没有该行为的子类的父级...
那么......有没有办法避免重复该代码的aaaalll?
也许两个子类的共同超类是超类的子类本身?
我建议在父类中提取方法作为抽象方法(如果父类是抽象的),或者只是在子类中重写的方法.如果这是不可能的,或者我希望我建议添加一个扩展父类的公共抽象类,它只包含两个子类共有的方法,然后由两个子类扩展.
如果添加和更改父类可能是一个问题,你可以通过使用一个接口来做同样的事情,然后由两个子类实现,你需要调用你的代码,你只需要转换到给定的接口并调用所需的方法.
像这样的东西:
interface CommonInterface {
void commonMethod();
}
class SubClassB implements CommonInterface {
void commonMethod() {
// implementation
}
}
class SubClassA implements CommonInterface {
void commonMethod() {
// implementation
}
}
//...
if (obj instanceof CommonInterface) {
((CommonInterface)object).stuffCall();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
151 次 |
最近记录: |