您是否可以在Java中使用setter方法访问私有数据字段?

时间:2016-11-17 04:32:49

标签: java private public

在顶部stackoverflow回答这个问题(Why are instance variables in Java always private?)时,有人说如果你有以下带有私有字符串的类,

class Address {
  private String phone;

}

然后您无法使用以下代码修改私有字符串,但我尝试了它并且它可以正常工作。

// main method
Address a = new Address();
a.phone="001-555-12345";

他说你必须使用setter方法,但我没有使用它。

我想我误解了他的答案,但我不知道怎么回事。我要感谢任何见解,谢谢。

1 个答案:

答案 0 :(得分:2)

您的主要方法必须在 您的地址类中才能使用,因为私有字段只能在 声明它们的类中访问。尝试更改您的代码,以便主方法位于其他地方(通常是这种情况),它将不再有效。

例如,这有效:

class Address {
    private String phone;

    public static void main(String[] args) {
        Address a = new Address();
        a.phone="001-555-12345";  // this works fine -- it's within Address
    }
}

但请保留上述代码并尝试以下代码:

class TestAddress {

    public static void main(String[] args) {
        Address a = new Address();
        a.phone="001-555-12345";  // won't compile since it's not within Address class
    }
}