Java 中没有 setter 方法可以访问私有数据字段吗?

Can you access private data fields without setter methods in Java?

在这个问题 (Why are instance variables in Java always private?) 的顶级 Whosebug 回答中,有人说如果你有以下 class 和私有字符串,

class Address {
  private String phone;

}

那么你不能使用下面的代码修改私有字符串,但我试过了,它有效。

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

他说你要用setter的方法,我没用

我想我误解了他的回答,但我不确定是怎么回事。我将不胜感激任何见解,谢谢。

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

例如,这有效:

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
    }
}