为什么我们可以直接将变量设置为protected?
时需要保护修饰符方法例如:在下面的代码中,他们将实例变量SocialSecurityNumber设置为private并定义受保护的setter方法来设置其值?为什么我们不能直接将变量SocialSecurityNumber设置为protected?
public class SSNWrapper {
private int SocialSecurityNumber ;
public SSNWrapper (int ssn) { socialSecurityNumber = ssn ;}
public int getSSN () { return SocialSecurityNumber; }
protected void setSSN(int SSN) { socialSecuritynumber = ssn ; }
}
答案 0 :(得分:3)
在那个具体的例子中,没有太大区别。在现实生活中,setSSN
方法应该更像是:
protected void setSSN(int SSN) throws InvalidSSNException {
// check that the given SSN is valid
// ...
socialSecurityNumber = ssn;
}
这允许基类保证它只保存有效的SSN。如果字段受到保护,则基类无法保证。
答案 1 :(得分:1)
来自Access修饰符的教程:
选择访问级别的提示:
如果其他程序员使用您的课程,您需要确保错误 从滥用不可能发生。访问级别可以帮助您实现此目的。
使用对特定成员有意义的最严格的访问级别。除非你有充分的理由不使用私人。
避免除常量之外的公共字段。 (许多例子都在 教程使用公共字段。这可能有助于说明一些观点 简明扼要,但不建议用于生产代码。)公共字段 倾向于将您链接到特定的实现并限制您的 更改代码的灵活性。
简短版本是防止其他类修改声明实例变量private的类中的数据。
答案 2 :(得分:0)
因为有时您需要更改获取或设置此值的操作。例如,您需要计算此值。或者设置另一个值。或运行监听器或其他东西......所以这是为了给你更多的灵活性。