使用getter和setter(只获取和设置)而不是简单地为这些变量使用公共字段有什么好处?
如果getter和setter所做的不仅仅是简单的get/set,我可以很快地解决这个问题,但我不是100%清楚如何做到:
public String foo;
比:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
而前者需要的样板代码要少得多。
我们使用getter和setter:
可重用性在编程的后期执行验证
Getter和setter方法是访问私有类成员的公共接口。
封装咒语
封装的口头禅是将字段私有化,将方法公开化。
Getter方法:我们可以访问私有变量。Setter方法:我们可以修改私有字段。
尽管getter和setter方法没有添加新的功能,但我们可以稍后再改变主意,制作该方法
较好的更安全的;和更快。
只要可以使用值,就可以添加返回该值的方法。而不是:
int x = 1000 - 500
use
int x = 1000 - class_name.getValue();
用外行的话来说
假设我们需要存储此人的详细信息。此人具有姓名、年龄和性别字段。要做到这一点,需要创建姓名、年龄和性别的方法。现在,如果我们需要创建另一个人,就需要重新创建姓名、年龄和性别的方法。
我们可以使用getter和setter方法创建一个bean类(Person),而不是这样做。因此,明天我们只要在需要添加新人员时创建这个Bean类(Person类)的对象即可(见图)。因此,我们重用bean类的字段和方法,这要好得多。
来自数据隐藏的获取者和设置者。数据隐藏意味着我们正在向外部人员或外部人员/事物隐藏无法访问的数据这是OOP中一个有用的特性。
例如:
如果您创建了一个公共变量,您可以访问该变量并在任何地方(任何类)更改值。但如果创建为私有,则该变量无法在除声明的类之外的任何类中查看/访问。
public和private是访问修饰符。
那么我们如何在外部访问该变量:
这是获得者和获得者的地方。您可以将变量声明为private,然后可以为该变量实现getter和setter。
示例(Java):
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name= name;
}
优势:
当任何人想要访问或更改/设置平衡变量的值时,他/她必须获得许可。
//assume we have person1 object
//to give permission to check balance
person1.getName()
//to give permission to set balance
person1.setName()
您也可以在构造函数中设置值,但稍后需要时要更新/更改值,必须实现setter方法。
如果您想要一个只读变量,但不想让客户端改变访问它的方式,请尝试使用这个模板类:
template<typename MemberOfWhichClass, typename primative>
class ReadOnly {
friend MemberOfWhichClass;
public:
template<typename number> inline bool operator==(const number& y) const { return x == y; }
template<typename number> inline number operator+ (const number& y) const { return x + y; }
template<typename number> inline number operator- (const number& y) const { return x - y; }
template<typename number> inline number operator* (const number& y) const { return x * y; }
template<typename number> inline number operator/ (const number& y) const { return x / y; }
template<typename number> inline number operator<<(const number& y) const { return x << y; }
template<typename number> inline number operator^(const number& y) const { return x^y; }
template<typename number> inline number operator~() const { return ~x; }
template<typename number> inline operator number() const { return x; }
protected:
template<typename number> inline number operator= (const number& y) { return x = y; }
template<typename number> inline number operator+=(const number& y) { return x += y; }
template<typename number> inline number operator-=(const number& y) { return x -= y; }
template<typename number> inline number operator*=(const number& y) { return x *= y; }
template<typename number> inline number operator/=(const number& y) { return x /= y; }
primative x;
};
示例用途:
class Foo {
public:
ReadOnly<Foo, int> cantChangeMe;
};
记住,您还需要添加按位和一元运算符!这只是为了让你开始