为什么在java中使类变量私有和方法公共更好

为什么在java中使类变量私有和方法公共更好,java,Java,作为一个新手,这个问题有时可能会重复。我知道Java中的封装和访问修饰符。但在一次采访中,我被问到为什么大多数时间变量是私有的,而获取者和设定者是公共的。我想通过一些我在stackoverflow中找不到的例子来了解一下。例如,以一个班级人员为例: public class Person { private String name; private String surname; private int age; public void setAge(int age) { if

作为一个新手,这个问题有时可能会重复。我知道Java中的封装和访问修饰符。但在一次采访中,我被问到为什么大多数时间变量是私有的,而获取者和设定者是公共的。我想通过一些我在stackoverflow中找不到的例子来了解一下。

例如,以一个班级人员为例:

public class Person {
 private String name;
 private String surname;
 private int age;

 public void setAge(int age) {
   if (age < 0 ) throw new IllegalArgumentException("age cannot be negative");
   this.age = age;
 }
}
这允许您控制如何从外部更改变量。如果将年龄变量设置为public,则可以将年龄设置为-50或其他您不想要的值。
您希望实现您的类的其他用户不能像他们希望的那样更改变量,而是希望他们坚持您的控制流。以一个复杂的算法为例,您不希望让用户直接使用该集合变量,因为这可能会破坏功能。另一点可能让您感兴趣的是,如果您有一个只能通过公共setter方法设置的私有变量,您可以记录更改。

您应该为此做一些google操作,但您可以从开始,因为您希望能够控制变量的更改方式参见:,还假设您希望您的marks变量仅在0到100之间。如果它是公共的,则可以为其指定任何值(假设为200)。另一方面,如果现在将其设置为私有并提供getter和setter,则可以控制值修改。您可以在setter中写入if-else条件,并且不为超出范围的变量设置任何值。