当我们有访问器和mutator时,为什么要声明私有字段?

如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的。 如果我需要访问或更改它们,我可以创建一个访问器和mutator方法。 我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装。

我不明白的是,如果我创建一个公共访问器和mutator方法,那个时候变量public是不是? 为什么在任何人都可以访问私有变量的情况下仍然使用私有变量?

我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有, 即使我们通过这些方法让任何人都可以访问它?

是的,你是对的,它确实有效地使变量公开。 但是有一个重要的区别,即它使您能够在以后更改内容:您可以根据需要删除setter,或者将其设置为private,而不会影响使用getter从字段读取的代码。

如果您刚刚将变量设置为public,那么在不破坏字段读取的情况下,您将无法停止对该字段的写入。

它还有其他优点。 例如,如果您以后想要,可以使访问synchronized ,而不会破坏客户端代码。 简而言之,它允许稍后进行大量修改,否则不会在使用该类的代码中造成大量破坏。

并且你可以添加额外的逻辑,只要有人写入字段就会记录,或者阻止某些线程编写,或者其他……你可以将字段的类型从HashMap更改为TreeMap如果你的getter将其抽象出去并返回Map …等

私有字段被视为对象的内部字段。 因此,外界不需要知道数据如何存储在对象内。 这意味着您可以轻松更改对象数据的内部表示,而其他所有人仍使用相同的访问器/更改器来完成其工作。

访问者/ mutator也可能执行validation和对象内部所需的其他步骤,但您不希望暴露给使用该对象的代码。

您可以将所有字段设置为公共但这会限制您在以后很多代码现在依赖于以某种方式命名的字段时更改对象的内部结构的能力。