为什么以下代码编译良好?

public class MyStack {

    private static MyStack myStack ;
    private Stack<MyObject> stackOfMyObjects;

    private MyStack() {
        stackOfMyObjects = new Stack<MyObject>() ;
    }

    public static void pushToStack(MyObject myObject, MyStack myStack2) {
        myStack2.stackOfMyObjects.push(myObject) ;
    }

}

在这里,在 pushToStack 方法中,如何通过 stackOfMyObjects 定义了 myStack2 stackOfMyObjects 成员?

最佳答案



因为它仍然是MyStack。 Java中的访问控制与代码的显示位置有关,而与代码是否访问“不同”对象无关。

基本上,MyStack中的所有代码都可以使用MyStack中声明的私有(private)成员。

有关更多详细信息,请参见section 6.6 of the JLS。具体来说,在6.6.1节中:



在这里,访问确实发生在包围MyStack变量声明的顶级类(stackOfMyObjects)的主体内,因此允许访问。

关于java - Java访问误解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9784034/

10-10 13:49