2012-04-12 65 views
7

這看起來像一個愚蠢的問題,但我想知道創建抽象方法時的「最佳實踐」。他們的知名度應該公開還是保護?抽象方法的標準可見性

儘管實現抽象方法的子類將會公開,但維護抽象方法仍然是可取的嗎?

回答

10

取決於您的用例。如果抽象方法只實現了抽象類中公共方法中可用的某些更大功能,那麼它可能應該受到保護。如果它是可以/應該從另一個班級調用的獨立方法,則將其公開化。

例子:

public abstract class Foo implements Closeable { 
    public final void close() { 
     // do whatever 
     doClose(); 
    } 

    protected abstract void doClose(); 
} 

public abstract class Bar { 
    public void read(byte[] b) { 
     for(int x = 0; x < b.length; x++) { 
      b[x] = read(); 
     } 
    } 

    public abstract int read(); 
} 
1

我想這取決於方法的作用。如果它代表類(和子類)行爲,它應該是公開的。如果要由子類實現的方法是內部的並且被基類的其他方法使用(如定義算法策略),它應該受到保護。

2

這裏是公共的區別,protected和private:

Modifier

對於方法,如果您設置的公共可所有的包內訪問的所有類在你的項目中,如果你設置了保護,它可以訪問擴展抽象類的相同包或子類中的所有類。

對於問題編號。 2:是的。

+3

這不是他問的。他問什麼是抽象類的最佳實踐,而不是公共/私人/保護的定義。 – 2012-04-12 04:21:19

+1

是的,他可以根據我的解釋決定他想要選擇公開還是保護。 – Crazenezz 2012-04-12 04:24:49