This question already has answers here:
Set and Get Methods in java?
(15个答案)
5年前关闭。
在我的CS课上,我只是在学习课和OOP。
因此,当您创建类时,将初始化一定数量的私有变量。
我知道您将它们设为私有,因为如果它们是公开的,它们很容易更改,并且可能导致许多错误。
因此,我们使用get和set方法来更改变量。但这又使变量非常容易更改,对吗?那么首先将它们私有化有什么意义呢?
2.类的用户不需要知道该类实际如何存储数据。这意味着数据是分离的并且独立于用户而存在,从而使代码更易于修改和维护。这使维护人员可以在不影响用户的情况下进行频繁的更改,例如错误修复,设计和性能增强。
此外,封装的资源可为每个用户统一访问,并且具有独立于用户的相同行为,因为此行为是在类中内部定义的。
示例(获取值):
现在,如果我想返回值的两倍呢?我可以更改我的吸气剂,使用我的示例的所有代码都不需要更改,并且将获得两倍的值:
3.使代码更简洁,更具可读性且更易于理解。
这是一个例子:
没有封装:
带封装:
在第二个示例中,您将了解您对所获取的信息有更多的控制权,以及这些信息有多清晰。请注意,此示例很简单,在现实生活中,您将要处理的类涉及许多资源,这些资源可被许多不同的组件访问。因此,封装资源可以使我们更清楚地访问哪些资源以及以何种方式(获取或设置)。
这是关于此主题的
这是关于数据封装的
(15个答案)
5年前关闭。
在我的CS课上,我只是在学习课和OOP。
因此,当您创建类时,将初始化一定数量的私有变量。
我知道您将它们设为私有,因为如果它们是公开的,它们很容易更改,并且可能导致许多错误。
因此,我们使用get和set方法来更改变量。但这又使变量非常容易更改,对吗?那么首先将它们私有化有什么意义呢?
最佳答案
使用getter和setter(称为encapsulation
或data-hiding
)的一些好处:
1.可以将类的字段设置为只读(仅通过提供getter)或仅写(通过仅提供setter)。这使该类可以完全控制谁可以访问/修改其字段。
例:
class EncapsulationExample {
private int readOnly = -1; // this value can only be read, not altered
private int writeOnly = 0; // this value can only be changed, not viewed
public int getReadOnly() {
return readOnly;
}
public int setWriteOnly(int w) {
writeOnly = w;
}
}
2.类的用户不需要知道该类实际如何存储数据。这意味着数据是分离的并且独立于用户而存在,从而使代码更易于修改和维护。这使维护人员可以在不影响用户的情况下进行频繁的更改,例如错误修复,设计和性能增强。
此外,封装的资源可为每个用户统一访问,并且具有独立于用户的相同行为,因为此行为是在类中内部定义的。
示例(获取值):
class EncapsulationExample {
private int value;
public int getValue() {
return value; // return the value
}
}
现在,如果我想返回值的两倍呢?我可以更改我的吸气剂,使用我的示例的所有代码都不需要更改,并且将获得两倍的值:
class EncapsulationExample {
private int value;
public int getValue() {
return value*2; // return twice the value
}
}
3.使代码更简洁,更具可读性且更易于理解。
这是一个例子:
没有封装:
class Box {
int widthS; // width of the side
int widthT; // width of the top
// other stuff
}
// ...
Box b = new Box();
int w1 = b.widthS; // Hm... what is widthS again?
int w2 = b.widthT; // Don't mistake the names. I should make sure I use the proper variable here!
带封装:
class Box {
private int widthS; // width of the side
private int widthT; // width of the top
public int getSideWidth() {
return widthS;
}
public int getTopWIdth() {
return widthT;
}
// other stuff
}
// ...
Box b = new Box();
int w1 = b.getSideWidth(); // Ok, this one gives me the width of the side
int w2 = b.getTopWidth(); // and this one gives me the width of the top. No confusion, whew!
在第二个示例中,您将了解您对所获取的信息有更多的控制权,以及这些信息有多清晰。请注意,此示例很简单,在现实生活中,您将要处理的类涉及许多资源,这些资源可被许多不同的组件访问。因此,封装资源可以使我们更清楚地访问哪些资源以及以何种方式(获取或设置)。
这是关于此主题的
good SO thread
。这是关于数据封装的
good read
。10-05 22:22