1

那个子类不是继承了超类的一切吗?但是子类无法访问其超类的私有属性/方法,但可以访问自己的。所以我写了一个测试程序。但似乎子类没有一个!

class a {
    private void set() {
           System.out.println("a.set()");
    }
}
public class b extends a {
//      private void set() {
//      System.out.pritln("b.set()");
//       }
        void f() {
             set();
        }
        public static void main(String[] args) {
             b b = new b();
             b.f();
        }
}

如果我像示例那样注释掉 b 中的 set() 方法,它将无法编译。

任何的想法?JVM视图有什么解释吗?

4

3 回答 3

4

是的,private无法从派生类访问方法。protected并且public是。

当您set在派生类中声明时,您可以访问此派生版本,因为它现在是类的一部分(不再是private基类方法)。

如果您尝试调用super.set().

编辑:我认为aroth所说的技巧是反射。:) 不。

于 2012-07-26T01:53:25.150 回答
0

这个问题毫无意义。私人是私人的。对当前类之外的所有内容均不可见。如果您想要“受保护”,请使用它。

于 2012-07-26T01:54:07.897 回答
0

如果你想要介于两者之间的东西,请使用“protected”修饰符而不是“private”修饰符;protected 本质上意味着除子类之外的所有内容都是私有的。

于 2012-07-26T02:04:57.343 回答