![](/img/trans.png)
[英]How can a class method access a private member of another instance of the same class?
[英]How can a class see a public member of another class when the member is a private class instance
我是一名C ++程序员,试图了解Java语言的最佳实践。 请相应地调整您的回复:)
我举了一个例子,但我不明白为什么/如何观察到我的行为是可能的。
//HelloWorld.java
public class HelloWorld{
public static void main(String []args){
Newfile nf = new Newfile();
nf.setTest(5);
System.out.println(Integer.toString(nf.test.i));
System.out.println("Hello World");
}
}
//Newfile.java
class TEST {
public int i;
}
public class Newfile{
public TEST test = new TEST();
public int setTest(int i) {
return test.i = i;
}
}
// THIS WORKED
/*
5
Hello World
*/
由于Test
是私有的(我想也是这样),那么HelloWorld
怎么能操纵TEST
的内容(即i
成员)?
现在奇怪的一部分,当我移动TEST
私人内部类的Newfile
现在表现为我所预料的上述实验的行为,我得到:
i in Newfile.TEST is defined in an inaccessible class or interface
由于
TEST
是private
(我想也是)
不。 实际上是package-private
。
从Java教程 :
如果一个类没有修饰符(默认值,也称为package-private),则仅在其自己的包中可见
编辑
HelloWorld
和TEST
类都是同一程序包的成员(在您的情况下,由于您似乎未明确指定该程序包,因此它们都是未命名程序包的成员)。 因此,即使TEST
是包私有的,也可以从HelloWorld
访问。
现在最奇怪的部分是,当我将TEST移到Newfile的私有内部类中时,它现在的行为与我期望上述实验的行为一样,我得到了:
i in Newfile.TEST is defined in an inaccessible class or interface
通过将TEST
设为Newfile
的private
内部类,您可以使其仅对Newfile
类本身的成员可以访问,因此,在这种情况下,自然不能再从HelloWorld
进行访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.