2011-10-22 290 views
0

當我們可以直接將變量設置爲受保護時,爲什麼我們需要受保護的修飾符方法?Java中的受保護方法

例如:在下面的代碼中,他們將實例變量SocialSecurityNumber設置爲private,並定義一個受保護的setter方法來設置其值?爲什麼我們不能直接將變量SocialSecurityNumber設置爲受保護的?

public class SSNWrapper { 

    private int SocialSecurityNumber ; 

    public SSNWrapper (int ssn) { socialSecurityNumber = ssn ;} 
    public int getSSN() { return SocialSecurityNumber; } 
    protected void setSSN(int SSN) { socialSecuritynumber = ssn ; } 

} 
+5

請參閱http://stackoverflow.com/questions/1568091/why-use-getters-and-setters –

+1

因爲來自類層次結構外的代碼可以使用公共setSSN方法設置變量。 –

回答

0

因爲有時您需要更改獲取或設置此值的操作。例如,你需要計算這個值。或者設置另一個值。或者運行監聽器或其他東西....所以這是給你更多的靈活性。

+1

我不知道這是否真的回答了這個問題 – Woot4Moo

1

從教程訪問修飾符:在選擇一個訪問級別

提示:

如果其他程序員使用你的類,你要確保不被濫用的錯誤 不可能發生。訪問級別可以幫助你做到這一點。

使用對特定成員有意義的限制性最強的訪問級別。除非你有充分的理由不要私人使用。

避免除常量外的公共字段。 ( 教程中的許多示例都使用公共字段,這可能有助於簡潔地說明 的一些要點,但不建議用於生產代碼。)公共字段 傾向於將您鏈接到特定的實現並限制您在更改中的靈活性你的代碼。

簡短版本是防止其他類修改聲明實例變量private的類中的數據。

3

在這個具體的例子中,不會有太大的區別。在現實生活中,setSSN方法也許應該更喜歡:

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

這樣的基類,以保證它僅持有有效的社會安全號碼。如果該字段受保護,基類不能保證。