gpt4 book ai didi

Java访问误区

转载 作者:行者123 更新时间:2023-12-02 05:44:07 24 4
gpt4 key购买 nike

为什么下面的代码可以正常编译?

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方法中,myStack2stackOfMyObjects成员,事件虽然stackOfMyObjects有被定义为私有(private)?

最佳答案

Here, in the pushToStack method, how can stackOfMyObjects be accessed from myStack2, event though stackOfMyObjects has been defined private?

因为它仍然是一个 MyStack。 Java 中的访问控制是关于代码出现的位置,而不是它是否正在访问“不同”的对象。

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

参见 section 6.6 of the JLS更多细节。具体来说,在 6.6.1 节中:

Otherwise, if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com