Java允许运行私有方法吗?有人能解释一下原因吗?

Java允许运行私有方法吗?有人能解释一下原因吗?,java,Java,有人问我他是否可以运行私有基函数。我告诉他,当然这是不可能的(除了保级技巧)。 但这到底是什么: public class MyClass { public static void main(String args[]) { A a = new B(); a.doSomething(); B b = new B(); b.doSomethingMore(); } static class A {

有人问我他是否可以运行私有基函数。我告诉他,当然这是不可能的(除了保级技巧)。 但这到底是什么:

public class MyClass {
    public static void main(String args[]) {

        A a = new B();
        a.doSomething();

        B b = new B();
        b.doSomethingMore();
    }

   static class A {
        private void doSomething(){
            System.out.println("something");
        }
    }

    static class B extends A{
        public void doSomethingMore(){
            ((A)this).doSomething();
        }
    }
}

A
B
都是
MyClass
的成员,因此他们可以访问
MyClass
的所有私有功能,以及彼此的私有功能;而且
MyClass
可以访问它们的所有私有功能。更多信息请访问

现在,如果它们不是嵌套类,那么自然地,
MyClass
就不能访问它们的私有特性,也不能访问彼此的私有特性。例如,这不会编译:

public class MyClass {
    public static void main(String args[]) {
        A a = new B();
        a.doSomething();            // error: doSomething() has private access in A

        B b = new B();
        b.doSomethingMore();
    }
}

class A {
    private void doSomething(){
        System.out.println("something");
    }
}

class B extends A{
    public void doSomethingMore(){
        ((A)this).doSomething();    // error: doSomething() has private access in A
    }
}

关于代码有什么不清楚的地方?您的方法是类
MyClass
的私有方法。它可以从
MyClass
private
访问级别类中的任何代码调用是的,您的内部类A和B在同一范围内。如果从MyClass中删除B,可见性将被隐藏,并且不能调用私有方法。如果这是重复的,我不会感到惊讶,但我不会将其称为重复的(当然不是的!)。我可以理解MyClass可以访问他的孩子,但B可以访问a的doSomething完全没有意义。谢谢你的回答。@Zixav-我明白你为什么会这么想。:-)但是嵌套类的要点,它们背后的设计哲学,是它们实际上是它们所在类的一部分。所以所有的私人物品都在他们之间共享。(坦率地说,我可以看到设计决策朝着任何一个方向发展。24多年前,它就是这样发展的…:-)