2011-09-14 34 views
0

我有一個有5種方法的類。這些方法中的3個必須由同一個包中的其他類打開,2個必須由另一個包中的其他類打開。什麼是更好的:與公共/保護接口或玩耍?

爲例:

void setTimeArray(int[] zeitArray) { 
    this.timeArray = timeArray ; 
} 

public int[] getTimeArray() { 
    return timeArray ; 
} 

現在我不知道我應該做什麼:

  • 我應該做的3種方法protected和其他2 public
  • 我應該爲2種方法制作一個接口嗎?

那麼,爲什麼我的應用程序的性能會更乾淨,更好?

回答

2

您似乎對public,protected等的使用感到困惑。您班級的公共方法包括您班級的公共接口。當你設計你的班級時,你決定你想向你的班級的消費者展示哪些功能。

您應該只使方法受保護IMO多態性。如果你正在使一個方法受到保護,以使包中的另一個類可以獲得內部等,那麼它可能是一個糟糕的類設計。你應該而不是做一個方法保護,因爲沒有其他類正在使用它現在。如果將來需要從其他班級使用它,則必須更改班級。

如果沒有多個實現該接口的具體類,則不需要創建接口。

如果你得到了OOP範例,一個類的公共接口應該很自然地流動。該決定應該涉及更多關於如何來揭露功能比什麼來揭露。

2

如果有兩個方法共有的單個「主題」,但不是其他3個,請考慮將該類分成兩個不同的類。如果你這樣做,考慮將這個類用2種方法移到它將被使用的包中(如果它對於包的「主題」是有意義的話)。

在任何情況下,使用最低的可見性,可以讓你做你想做的事情。此外,更喜歡默認的可見性保護(不同之處在於受保護像默認,但也允許不同的包中的子類來訪問這些方法)。

+0

我有setter和getter,其他包只應該使用getter – Neifen

+1

@neifen:然後只是使用可見性。公共獲得者,默認設置者。 –

2

由於類的3個方法是由同一包,那麼沒有必要有一個保護訪問修飾符的類訪問,而你可以使用默認受保護應在您希望您的子類訪問方法時使用。

和有關公共方法,你可以去界面,如果你認爲你有擁有它實現這兩個方法的相似課程。所以通過界面你可以把它們聯繫起來。

1

你應該只要你覺得寫的界面,你可以使用或需要它;)

除了接口:保持非接口方法protected是你的問題的有效解決方案。

不關心性能。根據接口進行編程或使用訪問修飾符(如public,protected或private)不會影響性能。

+0

使非接口方法包私有(默認)也可以工作。無需使它們受到保護(即使在包外也允許從子類訪問)。 – Thilo