假设我们要将int y
设置为5
,我们通常会y=5;
int y=0;
y=5;
但是如果我们使用getter和setter而不是以下面的方式
public class x {
private int y;
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
然后我们创建x的对象并调用它的方法
x x1=new x();
x1.setY(5);
我的问题是,如果我们可以直接设置y = 5那么为什么使用getter和setter方法
答案 0 :(得分:1)
如果您想控制可以设置的值,请使用setter。
怎么样
cat.weight = 0
VS
cat.setWeight(0);
在setter中你可以检查体重是否具有适当的值
public void setWeight(int weight){
if(weight > 0){
this.weight = weight;
}
else{
// SHOUT I dont want my cat to die
}
}
答案 1 :(得分:1)
是的,您可以直接访问类的数据成员,但根据OOPS概念,数据需要封装在对象中,我们应该使用数据周围的接口来访问它。由于数据是特定对象的私有属性,因此我们将getter和setter定义为访问该数据的接口。 Getters和Setter还提供了一种隐藏数据存储细节的媒介,如果你想在每次获取或设置操作之前处理数据,这是不方便的,你不能直接访问变量。
答案 2 :(得分:0)
这主要是出于计算方面的安全考虑。 您始终将类变量声明为私有变量,并且您不能在x = 5;之外更改它们。 但是通过制定者和吸气剂你可以做到这一点。
答案 3 :(得分:0)
这最常用于面向对象的编程,跟上封装的概念。通过将类的成员变量保持为私有,您可以隐藏它们并防止它们受到其他代码的影响。
您只能使用公共成员函数修改这些变量。设置此界面并隐藏数据或详细信息可以更轻松地读取代码。
您可以在此处阅读更多内容:http://en.wikipedia.org/wiki/Mutator_method
答案 4 :(得分:0)
getter和setter的真正意义在于你应该只在适当的地方使用它们,并且它们不仅可以获取和设置字段。
所有这些都是隐藏在简单的“getter and setter”界面背后的实现细节。这就是封装的内容。
答案 5 :(得分:0)
你所询问的是OOP的基本思想之一。实际编程越多,就会有很多理由变得更加明显。
答案 6 :(得分:0)
Setter和getter用作面向对象编程中最佳实践的一部分。 要遵循的一些步骤是:
通过这样做,您可以确保变量未设置为错误和无效的输入。
您可以在setter中调用validate()
方法,并具有验证该方法中输入的逻辑。
答案 7 :(得分:0)
这是一场漫长而长久的谈话。
我会在这里指出你正确的方向,但你需要自己解决这个问题,以便真正理解并内化它。
一个原因是,吸气剂和制定者可以保护自己。您可以控制修改变量时发生的情况。
例如,你可以决定拒绝一些价值观 - 也许你的领域需要是积极的。您不能信任调用者尊重该约束(编程规则1,不信任任何人)并且需要强制执行它,可能还有一个断言。 setter允许您在实际修改之前验证该值。直接访问允许调用者将非法值放在您的控制之外的类中 - 并且由于它可能发生,将发生。另一个原因是抽象:如果你暴露这个领域,你就会永远陷入你的代表。您可能会在以后找到更好,更优化的表示,但由于您已经让呼叫者直接访问您的字段,因此您无法更改它们 - 现在它们依赖于其类型。 另一方面,隐藏getter和setter背后的实现细节,允许您在不破坏外部合同的情况下更改内部表示 - 只需修改getter,无需任何人需要知道。