2016-03-08 74 views
0

什麼之前,正確的層次結構與正確的類修飾符getter和setter方法

我的問題是simmilar這些: get super class value in java Getting the name of a sub-class from within a super-class

但不解決我的問題。所以,我要解釋它。我希望沒有重複的話題......

我創建一個層次。此層次結構僅適用於使用getter和setter的Object。只是爲了顯示信息。

嗯,我想正確地做我的層次,但沒有做一些ilogical與修飾。這是我班的一個簡單的例子,是不完全的Java是僞代碼:

Class A 
    private id; 

Class B extends A 
    private dataB; 

Class C extends A 
    private dataC; 

變量「ID」是用於B類和C類常見的,因爲是B和C擴展A. 我在想,我從來不會使用A類來表示數據,只需要B和C,就像A是抽象類一樣。

我的問題是:

我不知道,如果是正確的put方法getter和setter A類與修飾符public和使用來自B類和C這個方法,因爲層次是正確的,是符合邏輯的,但數據「id」未正確封裝。

Class A 
    private id; 
    private name; 
    private age; 

    public getId(){...} 
    public getName(){...} 
    public getAge(){...} 

Class B extends A 
    private dataB; 

    public getDataB(){...} 

Class C extends A 
    private dataC; 

    public getDataC(){...} 

要訪問我的目標我想這樣做:

B.getDataB(); 
B.getId(); 
B.getName(); 
B.getAge(); 

C.getDataC(); 
C.getId(); 
C.getName(); 
C.getAge(); 

這工作,但A類的所有方法必須是公開的,變量未正確封裝。

是否有其他方法可以做到這一點? 這是最好的/最壞的方式?吸氣劑和吸附劑可能是「跳」修飾劑的邏輯的例外嗎?

我excpect你能理解我的榜樣,我的「英語」。

謝謝您的高級。

+1

你試圖解決什麼問題? B和C應該被期望繼承A的方法。使用getters/setter是一種實現封裝的策略。 –

+1

類的私有屬性不會被子類繼承。因此,你必須明顯地在子類中使用getter和setter。如果你想直接訪問子類中的「id」等私有變量,則需要將它們聲明爲受保護的。 –

回答

1

關於getter/setter有非常簡單的規則:

如果您在Agetter/setter類中聲明的變量應該是A類提供。如果您需要子類中的任何突變,請覆蓋。

這使代碼更易讀易調試。

順便說一句,你不能寫任何其他地方的id的獲取者/設置者,然後是A類,因爲它是私密的。所以,在這種情況下,上述理論也符合。

+0

好吧,我明白了。如果我總是對方法getter和setter使用「protected」修飾符,我總是可以在子類和孫子類中使用這些方法。 – Marquake

+0

嗯..但是最好讓公開發布者/吸氣者,除非你有任何理由使他們受到保護。我正在談論簡單的Java bean類 – Saif

+0

你說什麼,它讓我思考...而且我搜索了一些文檔,並且發現了這個:[link] http://docstore.mik.ua/orelly/java-ent /jnut/ch06_02.htm[/link]
6.2.7。方法 beanbox可以嚮應用程序設計人員公開bean的方法。唯一正式的約定是這些方法必須公開。下面的指導方針也很有用,但是: – Marquake

1

簡單, 你可以聲明變量作爲private。但相關getter/setter必須公開。

希望它能幫助你。

其實我們使用的getter和setter

  • 重用
  • 在編程
  • getter和setter方法來訪問私有 類成員的公共接口的後期階段執行驗證。

封裝步驟: 封裝過程是to make fields privatemethods public

Getter方法:我們可以訪問私有變量。

安裝人員方法:我們可以修改私人領域。

儘管getter and setter methods未添加新功能,但我們可以稍後改變主意,以便製作方法saferfaster

2

實現封裝有多種方式。

  1. 最好的方法是讓基類中的公共方法訪問私有數據成員。這就是你所應用的。
  2. 另一種方法是讓你的基類成員受保護,並在子類(繼承它們)中獲取和設置它們。

根據我的知識和其他JAVA書籍作者喜歡Paul Deitel喜歡第一種實現最大封裝的方法。

+0

好的,我打算使用第一個,我認爲更好。謝謝。 – Marquake