可能重复:
Public Data members vs Getters, Setters
Purpose of private members in a class
当你可以公开你的变量并避免像A.setVariableX(A.getVariableY())
这样的行的麻烦时,getter和setter有什么用?
答案 0 :(得分:11)
隐藏实施细节。如果您选择公开您的属性,然后决定更改其工作方式,则必须更改所有相关代码。
使用getter和setter,您通常可以在不更改可见API的情况下更改内部实现细节(从而避免更改使用相关类API的任何代码)。
答案 1 :(得分:3)
getters和setter可以进行验证和延迟实例化,而公共成员则不能。
顺便说一句,这不是语言无关的,因为实现属性的大多数语言都抽象出实现,因此它们看起来像代码中的公共成员。
答案 2 :(得分:3)
因为有时会对你的变量有什么限制,并且在设置它时必须检查它是否有意义。
例如,如果您的年龄不允许为-1,您可以在您的设置器中检查。if(value >= 0)
{
_age = value;
}
else
{
throw new InvalidAgeException("Age may not be less than 0");
}
答案 3 :(得分:2)
Setters和getters适用于属性,无论代码中有什么“属性”。
例如,您可以拥有一个angle
变量,该变量存储以弧度表示的角度值。然后,您可以使用您认为相关的任何角度单位为此变量定义setter和getter。
答案 4 :(得分:0)
这是封装原则的一部分。您可以使用setter和getter作为与对象交互的接口,以便您可以 - 例如 - 稍后添加任何功能(如验证输入数据),而无需触及使用该类的代码。