我理解除非将实例变量声明为私有,否则可以从其他类引用和更改它们。我知道为什么这会成为一个问题。
然而,我不明白,如果这些变量不能被声明为静态而无法从其他类引用,那么我们应该将这些变量声明为私有。
我们可以通过不将它们声明为静态来完成同样的事情吗?
如果这个问题的答案显而易见,我很抱歉,但我最近才开始学习Java语言和OOP。
感谢您的帮助!
答案 0 :(得分:0)
这是一种误解。 private
和static
没有任何关系。这将说明private
如何运作(尽管代码相当丑陋 - 我只是想让事情变得简单,请不要为此抨击我):
class PublicAttribute{
public Object someObject;
}
class PrivateAttribute{
private Object someObject;
}
PublicAttribute pub = new PublicAttribute();
pub.someObject = "Hello World"; //valid
PrivateAttribute priv = new PrivateAttribute();
priv.someObject = "Hello World"; //invalid, we can't access someObject, since it's private
另一方面, static
的工作原理如下:
class SomeObject{
public static String staticString;
public String notStatic;
}
SomeObject.staticString = "Hello World"; //valid
SomeObject.notStatic = "Hello World"; //invalid, we need an instance
new SomeObject().notStatic = "Hello World"; //valid, since we access the attribute of an object
这两个nutandbolts教程应该有所帮助:access modifiers和class members