Java setter和getter?

Pus*_*tal 1 java getter-setter

每个人都知道Java支持数据隐藏.

我去采访了.然后面试官问我,如果Java使用private作为数据类型支持数据隐藏.

他说,如果我们在该课程中使用setter和getter,那么通过使用这些setter和getter,我们可以轻松获得私有数据.

那么这是如何支持数据隐藏的呢?

他有可能试图让我抓住陷阱.但我无法回答这个问题.

我该怎么回复?

Sid*_*Sid 5

他认为如果"数据隐藏"是一个OOP原则,那么我们不是通过getter和setter暴露它来打破它.我想他希望你能说明直接访问数据成员与通过getter或setter进行数据成员之间的原则差异.在前一种情况下,类的客户端可能会错误处理数据,为其分配一个类设计器尚未设计要处理的类(例如,将学生的年龄设置为500).在后者(使用setter)中,类设计者对可以分配给数据的值施加了某些限制.在年龄示例中,setter可能类似于:

void setAge(int age) {
if(age<3 || age>100) 
  return;
this.age=age;
}
Run Code Online (Sandbox Code Playgroud)

假设不允许年龄在3岁以下和100岁以上的学生.因此,您仍然隐藏数据,但允许以与模块逻辑一致的方式操作它.