Java中的受保护方法

时间:2011-10-22 15:23:12

标签: java protected

为什么我们可以直接将变量设置为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 ; }

}

3 个答案:

答案 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)

因为有时您需要更改获取或设置此值的操作。例如,您需要计算此值。或者设置另一个值。或运行监听器或其他东西......所以这是为了给你更多的灵活性。