在Java中强制使用基类方法

yiz*_*lez 8 java inheritance

比方说,我有两个类BaseDerived:

public class Base {
    public Base() { }
    public void methodA() {
        System.out.println("Base: methodA");
        methodB();
    }
    public void methodB() {
        System.out.println("Base: methodB");
    }
}
public class Derived extends Base {
    public Derived() { }
    public void methodA() {
        super.methodA();
        System.out.println("Derived: methodA");
    }
    public void methodB() {
        System.out.println("Derived: methodB");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在用这个:

Base d = new Derived();
d.methodA();
Run Code Online (Sandbox Code Playgroud)

将打印:

Base: methodA
Derived: methodB
Derived: methodA
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有可能强行d.methodA()使用Base.methodB()我希望打印出来的代码:

Base: methodA
Base: methodB
Derived: methodA
Run Code Online (Sandbox Code Playgroud)

对于那些在C++中可以学习的人来说,这可以用类Base::methodB()中的东西来完成Base.Java中是否存在等价物?

我几乎肯定以前曾经问过,但是我找不到任何东西,如果这是重复的话,我很抱歉.

das*_*ght 6

如果基类中的方法可以具有覆盖,并且派生类提供了一个方法,则无法强制调用基类的方法.

如果基类需要调用基类中的功能,它可以将其放入单独的方法中,并声明它final.然后它可以在它自己的实现和派生的实现之间做出决定,如下所示:

public class Base {
    public Base() { }
    public void methodA() {
        System.out.println("Base: methodA");
        // Call the derived method
        methodB();
        // Call the base method
        methodB_impl();
    }
    public final void methodB_impl() {
        System.out.println("Base: methodB");
    }
    public void methodB() {
        methodB_impl();
    }
}
Run Code Online (Sandbox Code Playgroud)