java为什么我可以更改类中的private属性?
我正在使用Java
public class Drink {
private String contents;
Drink(String theContents){
contents = theContents;
}
public static void main(String[] args) {
Drink water = new Drink("water");
Drink oj = new Drink("orange juice");
Drink cocaCola = new Drink("Coca Cola");
oj.contents = "not orange juice";
System.out.println(oj.contents);
}
}
我认为输出应该是一个错误。
e、 g.行 oj.contents = "not orange juice";
应产生错误
如果这是错误的,请告诉我原因:) 谢谢
# 1 楼答案
来自official docs 这张图片将为您总结:
任何标有“private”访问修饰符的方法或变量都可以被定义它的类访问。该类之外的任何组件都无法访问。 不过,您还应该检查java中的反射,这是该规则的一个例外
# 2 楼答案
只有一个名为Drink的类,它包含变量和main方法。因此,main方法可以访问私有变量,因为它们在同一个类中。如果希望从另一个类访问变量,则需要getter和setter方法
# 3 楼答案
公共变量是所有类都可见的变量。私有变量是仅对其所属的类可见的变量。受保护变量是仅对其所属的类和任何子类可见的变量
变量内容对其他类不可见,因为它是私有的。但是你可以在课堂上的任何地方看到它
# 4 楼答案
private
主要是指:对同一源文件可见(因此可编辑;private/public/package private/protected都是全有或全无的事情)这里有一个很好的(IMO)思考方法:代码是一个与类相关的概念;而不是这些类的实例。因此,这里的代码正在修改它自己的一个字段:
contents
是这个源文件的一个私有字段。“但是,它不是你自己的,它来自饮料oj
”不,这是基于对象的思考。基于类的思考是这样的:“Drink.contents”字段在这个文件中