有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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";应产生错误

如果这是错误的,请告诉我原因:) 谢谢


共 (4) 个答案

  1. # 1 楼答案

    来自official docs 这张图片将为您总结:

    Members permitted by access levels

    任何标有“private”访问修饰符的方法或变量都可以被定义它的类访问。该类之外的任何组件都无法访问。 不过,您还应该检查java中的反射,这是该规则的一个例外

  2. # 2 楼答案

    只有一个名为Drink的类,它包含变量和main方法。因此,main方法可以访问私有变量,因为它们在同一个类中。如果希望从另一个类访问变量,则需要getter和setter方法

  3. # 3 楼答案

    公共变量是所有类都可见的变量。私有变量是仅对其所属的类可见的变量。受保护变量是仅对其所属的类和任何子类可见的变量

    变量内容对其他类不可见,因为它是私有的。但是你可以在课堂上的任何地方看到它

  4. # 4 楼答案

    private主要是指:对同一源文件可见(因此可编辑;private/public/package private/protected都是全有或全无的事情)

    这里有一个很好的(IMO)思考方法:代码是一个与类相关的概念;而不是这些类的实例。因此,这里的代码正在修改它自己的一个字段:contents是这个源文件的一个私有字段。“但是,它不是你自己的,它来自饮料oj”不,这是基于对象的思考。基于类的思考是这样的:“Drink.contents”字段在这个文件中