为什么可以在课堂上更改private属性?

时间:2020-09-22 11:14:35

标签: java

我正在使用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);
    }
}

我认为输出应该是错误。 例如, oj.contents = "not orange juice";行会产生错误。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

变量内容对于其他类是不可见的,因为它是私有的。但是您可以在Drink类中的任何地方访问它

答案 2 :(得分:0)

private主要是指:对同一源文件可见(因此可编辑;私有/公共/程序包私有/受保护都是无关紧要的事情)。

这是一种思考的好方法(IMO):代码是与类一起出现的概念;而不是这些类的实例。因此,此处的代码正在修改其自己的字段之一:contents是此源文件的私有字段。 “但是,这不是您自己的,而是oj来的饮料!” -不,这是基于对象的思想。基于类的思考说:这是文件中的“ Drink.contents”字段。

答案 3 :(得分:0)

official docs 该图片将为您总结:

Members permitted by access levels

定义了“私有”访问修饰符的任何方法或变量都可以访问。该类之外的任何组件将无法访问。 尽管您还应该检查一下Java中的Reflection,这是该规则的一个例外。

相关问题