java - 父类(super class)的子方法 (java)

标签 java oop inheritance

我有一个父类(super class),比如说BaseClass和两个子类,比如说SubclassASubclassB,它们没有任何其他关系他们之间但他们的父类之间。

在我的代码中的很多地方,我需要调用两个子类都具有但父类没有的方法......并且我发现自己重复了很多代码,如下所示:

if (obj instanceof SubclassA) {
// stuff
} else if (obj instanceof SubclassB) {
// same stuff
}

第一个想法应该是将这些“东西”放入父类(super class)中的方法中,但我不能,因为该父类(super class)是不具有该行为的其他子类的父类......

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

也许两个子类的共同父类(super class)本身就是父类(super class)的子类?

最佳答案

我建议将该方法提取为父类中的抽象方法(如果父类是抽象的),或者只是在子类中重写的方法。如果这是不可能的,或者是可取的,我建议添加一个通用的抽象类来扩展父类,该类只有两个子类通用的方法,然后由两个子类扩展。

如果添加和更改父类可能是一个问题,您可以使用一个由两个子类实现的接口(interface)来执行相同的操作,并且在您需要调用代码的地方,您只需转换为给定的接口(interface)并调用所需的方法。

类似这样的事情:

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();
} 

关于java - 父类(super class)的子方法 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112438/

相关文章:

java - 圆滑的 : Quit game via button

java - Jpa子类映射

javascript - 如何在 OOP 类中更新对象 json

java - 协调 thrift 中继承的缺失与 Java/Scala 中的方法定义

c# - 当我创建继承自 Form 的新类时,Visual Studio 会更改设计器生成的代码

c++ - 重载来自不同基类的同名虚函数。可能吗?

java - 关于继承和可扩展性的一般 OO 问题

java - 内存泄漏总是需要一个长生命周期的对象?

java - Intellij maven 窗口丢失

java - 从抽象中看到实现细节