Java setter和getter?

Java setter和getter?,java,getter-setter,Java,Getter Setter,每个人都知道Java支持数据隐藏 我去面试了。然后,采访者问我,Java是否支持使用私有作为数据类型来隐藏数据 他说,如果我们在那个类中使用setter和getter,那么通过使用这些setter和getter,我们可以很容易地获得私有数据 那么这是如何支持数据隐藏的呢 他可能是想让我落入陷阱。但我无法回答这个问题 对此,我该怎么回答呢?也许,他指的是信息隐藏。也许,他指的是信息隐藏。对“数据隐藏”的支持可以解释为,getter和setter方法就像数据的网关 只有按照惯例,确切地说,他们才能对

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

我去面试了。然后,采访者问我,Java是否支持使用私有作为数据类型来隐藏数据

他说,如果我们在那个类中使用setter和getter,那么通过使用这些setter和getter,我们可以很容易地获得私有数据

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

他可能是想让我落入陷阱。但我无法回答这个问题

对此,我该怎么回答呢?

也许,他指的是信息隐藏。

也许,他指的是信息隐藏。

对“数据隐藏”的支持可以解释为,getter和setter方法就像数据的网关

只有按照惯例,确切地说,他们才能对以其命名的成员进行操作。他们可以做任何事情,而且它仍然是完全可编译和合法的java。

支持“数据隐藏”的原因是getter和setter方法就像数据的网关


只有按照惯例,确切地说,他们才能对以其命名的成员进行操作。他们可以做任何事情其他事情,它仍然是完全可编译的合法java。

如果您将setter&getter设置为公共/受保护/默认,那么您可以访问不同级别的私有成员。。如果将setter和getter设置为私有,那么数据实际上是隐藏的。最后一种方法毫无意义,尽管如果将setter&getter设置为public/protected/default,那么就可以访问不同级别的私有成员。。如果将setter和getter设置为私有,那么数据实际上是隐藏的。最后一种方法毫无意义,尽管您可能会以许多不同的方式考虑实现set/get方法。

您可能会以许多不同的方式考虑实现set/get方法。

非常简单的示例:

类的版本1可以有这样的getter

public int getTotal() {
   return total_;
}
版本2可以做到这一点

public int getTotal() {
  return a + b;
}
我们已经更改了类的实现方式,但是类的客户端也不需要更改,因为数据隐藏在getter后面。

非常简单的示例:

类的版本1可以有这样的getter

public int getTotal() {
   return total_;
}
版本2可以做到这一点

public int getTotal() {
  return a + b;
}

我们已经更改了类的实现方式,但是类的客户端也不需要更改,因为数据隐藏在getter后面。

您所说的似乎是。基本上,getter和setter允许您根据需要公开类变量并隐藏其他变量。getter和setter还允许您执行任何其他必要的步骤,例如验证


getter和setter本身可以有不同的访问修饰符,因此您可以通过使用不同的访问修饰符将数据公开给某些类,而不是其他类。

您所说的似乎是。基本上,getter和setter允许您根据需要公开类变量并隐藏其他变量。getter和setter还允许您执行任何其他必要的步骤,例如验证


getter和setter本身可以有不同的访问修饰符,因此您可以通过使用不同的访问修饰符将数据公开给某些类,而不是其他类。

数据隐藏是一个坏术语,最好说是数据封装。在java中,对私有成员的访问是通过访问器和变异器(getter和setter)完成的,所有这些都是关于隐藏和控制对成员的访问,以便您可以控制如何修改实例的内部状态


我认为如果你提到java反射/元数据->你会得到额外的分数

数据隐藏是个坏术语,最好说数据封装。在java中,对私有成员的访问是通过访问器和变异器(getter和setter)完成的,所有这些都是关于隐藏和控制对成员的访问,以便您可以控制如何修改实例的内部状态


我想如果你提到java反射/元数据->你会得到额外的分数

如果我们将类字段声明为私有的话,它们是隐藏的。毫无疑问(我们忽略了讨厌的反射技巧)。如果我们想让这些值可以访问,我们就提供访问方法(例如getter/setter)

但不需要为所有字段提供getter和setter,也不需要根据字段来命名它们(通常)


类内部(字段)是完全隐藏的。

如果我们将类字段声明为私有的,则类字段是隐藏的。毫无疑问(我们忽略了讨厌的反射技巧)。如果我们想让这些值可以访问,我们就提供访问方法(例如getter/setter)

protected String name;

public void setName(String newName){
    if(newName.length() > 5) this.name = newName
}

public String getName(){
    return this.name;
}
但不需要为所有字段提供getter和setter,也不需要根据字段来命名它们(通常)

类内部(字段)是完全隐藏的

protected String name;

public void setName(String newName){
    if(newName.length() > 5) this.name = newName
}

public String getName(){
    return this.name;
}
在这个简单的例子中,name属性可以通过它在这个类及其所有子类中的名称来访问。如果要从无关类设置
name
的值,则必须使用
setName()
方法,例如,在该方法中可以应用一些验证

您可以找到有关此特殊方法的任何信息

请注意,如果mutator和accessor是
公共的
,则可以访问类的任何属性。这是这个概念的关键点之一,几乎所有java框架都与这个概念相关

在这个简单的例子中,name属性可以通过它在这个类及其所有子类中的名称来访问。如果要从无关类设置
name
的值,则必须使用
setName()
方法,例如,在该方法中可以应用一些验证

您可以找到有关此特殊方法的任何信息

请注意,如果mutator和accessor是空的,则可以访问类的任何属性