覆盖除派生类之外的其他类中的基类方法

时间:2017-02-06 02:09:29

标签: java class inheritance

我是Java概念的新手。我想知道实现以下逻辑的方法是什么。

考虑以下基类:

public class A {

    public methodA() {
    ....
    }

    public methodB() {
    ..
    }
}

派生类:

public class B extends A {

  // some B's stuff

    // Overriding base class method
    public methodA() {
    // Some common stuff
    super.methodA()
    }

    // Overriding base class method
    public methodB() {
    // some common stuff
    super.methodB()
    }

}

我们无法修改基类方法。所以我们重写课程并进行更改。

由于重写基类方法的数量很多,我想将它移到一个单独的类中,以便我的派生类B是干净的。

问题:

  1. 是否有任何方法可以覆盖单独的类中的基类方法并将其链接到派生类。
  2. 在覆盖超类方法时执行相同的条件集。在调用超类方法之前,无论如何都要有共同的条件。
  3. 注意:

    我可以创建一个C类扩展基类A并重写方法,然后使类B扩展C类。

    但是,我想知道这是否是正确的方法,还是有其他方法来实现上述逻辑。

    非常感谢任何帮助。

    提前致谢。

3 个答案:

答案 0 :(得分:2)

问:有没有办法在单独的类中覆盖基类方法并将其链接到派生类?

答:根据定义,"覆盖方法"必须在某些儿童班上完成。

问:由于重写基类方法的数量很多,我想将它移到一个单独的类中,以便我的派生类B是干净的。

答:我甚至不确定这意味着什么...但听起来你只想要一个儿童班......那个不那么复杂的孩子。也许"公共C级延伸B"?

或许你甚至想要定义一个"接口",并让A(或某些子类)实现该接口?

答案 1 :(得分:1)

  

是否有任何方法可以在单独的类中覆盖基类方法并将其链接到派生类。

不,覆盖必须在B中进行。但是,由于您可以完全控制B的实施,因此您可以创建另一个类HelperB,将替换放在那里,并将其用作B' s基类:

class A {
    // A's methods
}
class HelperB extends A {
    // Overrides of A's methods
}
class B extends HelperB {
    // B's methods
}

这将使B的逻辑不受A方法的覆盖。

  

在调用超类方法之前是否有共同条件要执行?

将公共逻辑移到A内的单独方法中。制作这些方法protected,并在A的实现中使用它。现在,您可以在B以及从A派生的所有其他类中重用相同的计算:

class A {
    // Evaluates a common condition
    protected boolean condition1() { ... }
    // Uses a common condition in the base class
    public void method1() {
        if (condition1()) {
            ...
        }
    }
}
class B extends HelperB {
    public void method1() {
        // Some B-specific code
        // Uses a common condition in the base class
        if (condition1()) {
            ...
        }
        // More B-specific code
    }
}

答案 2 :(得分:0)

为什么不创建另一个类C并将其扩展到ContextWrapper并将所有方法放在其中。要使用C类中的方法,请在类A或B中初始化类C的对象,并通过C的对象调用它的方法。确保方法在C类中是公共的。