当我们可以直接将变量设置为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 ; }
}
最佳答案
在该特定示例中,不会有太大差异。在现实生活中,setSSN
方法应该更像:
protected void setSSN(int SSN) throws InvalidSSNException {
// check that the given SSN is valid
// ...
socialSecurityNumber = ssn;
}
这使基类可以保证它仅包含有效的SSN。基类不能保证该字段是否受保护。