派生类如何调用基类的私有方法?

Sau*_*akh 30 java oop inheritance

public class PrivateOverride {  

    private void f() {  
        System.out.println("private f()");  
    }
}  

public class Derived extends PrivateOverride {  

    public void f() {                         //this method is never run.
        System.out.println("public f()");     
    }  
}  

public static void main(String[] args) {

    // instantiate Derived and assign it to 
    // object po of type PrivateOverride.
    PrivateOverride po = new Derived();  

    // invoke method f of object po.  It
    // chooses to run the private method of PrivateOveride
    // instead of Derived
    po.f();                         
  }  
}  
Run Code Online (Sandbox Code Playgroud)

所以,这段代码的输出是private f().现在,问题出现在我的脑海中:作为Derived Class 对象的po如何调用PrivateOverride的私有方法,它是它的基类?

Pét*_*zon 45

因为您在PrivateOverride类中定义了main方法.如果将main方法放在Derived类中,它将无法编译,因为.f()在那里不可见.

po.f()PrivateOverride类中的调用不是多态,因为f()PrivateOverride类中private,所以f()Derived类中不会覆盖.

  • `Derived`是一个`PrivateOverride`,因为`Derived`扩展了`PrivateOverride`.在除`PrivateOverride`类之外的任何类中,`private .f()`方法不可见.这种情况很特殊,主要方法是在`PrivateOverride`类中,它可以很容易地调用`f()`.这不是多态性.编译器只调用它通过`PrivateOverride`类型看到的内容. (6认同)

Eug*_*ene 5

我真的没有看到问题。该方法被称为类的“内部”,这在意料之中。这个方法根本没有被覆盖,而是被另一个方法遮蔽了。