public class PrivateOverride {  private void f() {
    System.out.println("private f()");
  }  public static void main(String[] args) {
    PrivateOverride po = new Derived();
    po.f();
  }
}class Derived extends PrivateOverride {
  public void f() {
    System.out.println("public f()");
  }
} ///:~ 
为什么不输出public f()而输出private f()呢?

解决方案 »

  1.   

    方法的执行由运行时类型绝对(也就是new的类型)
      

  2.   


     private void f() {
        System.out.println("private f()");
      }
    因为这个方法是private的,所以并不会动态帮定(多态) PrivateOverride po = new Derived();
        po.f();
    所以po是一个PrivateOverride 的引用,所以就直接执行自己的f() 方法, 不会执行Derived的f()
    public void f() {
        System.out.println("private f()");
      }
    改成这样就可以输出了private f()
      

  3.   

    private 方法被自动认为上一final方法,对导出类是屏蔽的。只有非private方法才可以被重载。thinking in c++里的例子
      

  4.   

    如果PrivateOverride 中是 public void f() ,那么输出结果就是 public f()
      

  5.   

    父类的private方法子类看不见,所以你在子类定义的void f()并没有覆盖父类的f(),于是你定义的父类类型的句柄po访问的方法f()就是父类的方法。
      

  6.   


    求购视频会议源代码!
    用提供者请电:
    [email protected]