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

2022-09-01 10:31:29
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();                         
  }  
}  

因此,此代码的输出为 。现在,我脑海中浮现出一个问题:作为派生类对象的 po 如何调用作为其基类的 PrivateOverride 的私有方法?private f()


答案 1

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

po.f() 调用在类中不是多态性,因为 in 类是 ,所以 in 类是 不被覆盖的。PrivateOverridef()PrivateOverrideprivatef()Derived


答案 2

我真的看不出问题所在。该方法称为“内”类,这几乎是预期的。此方法根本不是过度的,而是被另一个方法遮蔽。