Java中的受保护方法

Java中的受保护方法,java,protected,Java,Protected,当我们可以直接将变量设置为protected时,为什么需要protected修饰符方法 public class SSNWrapper { private int SocialSecurityNumber ; public SSNWrapper (int ssn) { socialSecurityNumber = ssn ;} public int getSSN () { return SocialSecurityNumber; } protected voi

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

}
例如:在下面的代码中,他们将实例变量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 ; }

}

因为有时需要更改获取或设置此值的操作。例如,您需要计算此值。或者设置另一个值。或者运行listener之类的。。。。这是为了给您更大的灵活性。

因为有时您需要更改获取或设置此值的操作。例如,您需要计算此值。或者设置另一个值。或者运行listener之类的。。。。因此,这将为您提供更大的灵活性。

来自访问修饰符教程:

选择访问级别的提示:

如果其他程序员使用您的类,您希望确保 不可能发生滥用。访问级别可以帮助您做到这一点

使用对特定成员有意义的最严格访问级别。除非你有很好的理由不这样做,否则请使用private

避免使用除常量以外的公共字段。(图中的许多示例) 教程使用公共字段。这可能有助于说明一些要点 简洁,但不建议用于生产代码。)公共字段 倾向于将您链接到特定的实现,并限制您的 更改代码的灵活性


简短的版本是,它阻止其他类修改声明实例变量private的类中的数据。

来自访问修饰符教程:

选择访问级别的提示:

如果其他程序员使用您的类,您希望确保 不可能发生滥用。访问级别可以帮助您做到这一点

使用对特定成员有意义的最严格访问级别。除非你有很好的理由不这样做,否则请使用private

避免使用除常量以外的公共字段。(图中的许多示例) 教程使用公共字段。这可能有助于说明一些要点 简洁,但不建议用于生产代码。)公共字段 倾向于将您链接到特定的实现,并限制您的 更改代码的灵活性


简短的版本是,它防止其他类修改声明实例变量private的类中的数据。

在该特定示例中,没有太大区别。在现实生活中,
setSSN
方法可能更像:

protected void setSSN(int SSN) throws InvalidSSNException {
  // check that the given SSN is valid
  // ...
  socialSecurityNumber = ssn;
}

这允许基类保证它只持有有效的SSN。基类不能保证字段是否受到保护。

在该特定示例中,不会有太大区别。在现实生活中,
setSSN
方法可能更像:

protected void setSSN(int SSN) throws InvalidSSNException {
  // check that the given SSN is valid
  // ...
  socialSecurityNumber = ssn;
}

这允许基类保证它只持有有效的SSN。基类无法保证字段是否受保护。

请参阅,因为类层次结构外部的代码可以使用公共setSSN方法设置变量。请参阅,因为类层次结构外部的代码可以使用公共setSSN方法设置变量。我不知道这是否真的回答了问题我不知道这是否正确真的回答了这个问题