当我们可以直接将变量设置为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。基类不能保证该字段是否受保护。

07-26 03:51