私有成员不是由Java中的子类继承(或可覆盖)?

时间:2012-07-26 01:49:47

标签: java jvm

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

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视图中的任何解释?

3 个答案:

答案 0 :(得分:4)

是的,无法从派生类访问private个方法。 protectedpublic是。{

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

如果您尝试拨打super.set(),则仍会收到错误。

编辑:aroth正在谈论的假设就是反思。 :)不要。

答案 1 :(得分:0)

这个问题毫无意义。私人是私人的。对当前班级以外的所有事物都不可见。如果您想要“受保护”,请使用它。

答案 2 :(得分:0)

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