超类的子方法(java)

dim*_*uta 0 java oop inheritance

我有一个超类,比方说BaseClass和两个子类,比如说SubclassASubclassB,它们之间没有任何其他关系,只有它们的父类.

在我的代码中的很多地方我需要调用子类都有但不是父类的方法......我发现自己重复了很多代码,看起来像:

if (obj instanceof SubclassA) {
// stuff
} else if (obj instanceof SubclassB) {
// same stuff
}
Run Code Online (Sandbox Code Playgroud)

第一个想法应该是将"stuff"放入超类中的方法中,但我不能,因为该超类是其他没有该行为的子类的父级...

那么......有没有办法避免重复该代码的aaaalll?

也许两个子类的共同超类是超类的子类本身?

Oli*_*POP 5

我建议在父类中提取方法作为抽象方法(如果父类是抽象的),或者只是在子类中重写的方法.如果这是不可能的,或者我希望我建议添加一个扩展父类的公共抽象类,它只包含两个子类共有的方法,然后由两个子类扩展.

如果添加和更改父类可能是一个问题,你可以通过使用一个接口来做同样的事情,然后由两个子类实现,你需要调用你的代码,你只需要转换到给定的接口并调用所需的方法.

像这样的东西:

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)