比方说,我有两个类Base和Derived:
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中是否存在等价物?
我几乎肯定以前曾经问过,但是我找不到任何东西,如果这是重复的话,我很抱歉.
如果基类中的方法可以具有覆盖,并且派生类提供了一个方法,则无法强制调用基类的方法.
如果基类需要调用基类中的功能,它可以将其放入单独的方法中,并声明它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)
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |