private 的意思就是只有在其所在的那个类里面才能使用,虽然实例了一个OverridingPrivate 的,但是不能使用其private的方法的

解决方案 »

  1.   

    呵呵.楼上只是贴代码时贴错了:
    class OverridingPrivate extends WithFinals {
    应为public  void f() ,而现在他问的是private void f()  为什么不能访问...存在访问权限的问题.
      

  2.   

    class WithFinals {
        void f() {
        System.out.println("WithFinals.f()");
      }
    }
    class OverridingPrivate extends WithFinals {
        private void f() {
        System.out.println("OverridingPrivate.f()");
      }
    }
    public class Hello {
      public static void main(String[] args) {
        OverridingPrivate op1 =
          new OverridingPrivate();
        WithFinals op = op1;
        op.f();
      }

    这样是不能通过编译的,如果父类中一个方法是子类可以看到的(比如说非private),那么子类如果提供了一样signature的方法(指:方法名字相同,参数个数相同,相应位置的参数的类型相同,返回参数可以不同),那么子类的这个方法的访问可见性要大于等于父类的那个方法。
    比如说:父类中的方法是 protected,那么子类的方法可以是:protected,或者public的,否则错误。