2013-07-11 74 views
-2

我的問題是關於「受保護的」訪問修飾符。當我需要使用受保護的訪問修飾符

我知道它的功能,但我不知道什麼時候需要使用它。一類 概念方法可分爲: 構造 制定者/吸氣從客戶端使用 方法(即其他類) 內部方法(類中的其他方法的使用)

回答

6

使用它時,你需要做的一些內部的東西沒有暴露在公共API中,但仍然需要被子類覆蓋。

2

當你希望後代類能夠看到超類的字段/方法時,你需要使用受保護的訪問修飾符,但是你不希望其他類看到這些。

0

受保護方法的主要用法是,類期望其派生類覆蓋具有其自身功能的方法,以及調用基類版本。

E.g.

public class Base 
{ 
    public void doStuff() 
    { 
     a(); b(); c(); 
    } 

    protected void a(){ //does something 
    } 
    protected void b(){ //does something 
    } 
    protected void c(){ //does something 
    } 
} 

... 

public class Derived extends Base 
{ 
    protected void b() 
    { 
     // Does something different before the original functionality. 
     super.b(); // Calls the original functionality 
     // Does something different after the original functionality. 
    } 
} 

... 

public class Main 
{ 
    public static void main(String args[]) 
    { 
     Base b = new Derived(); 
     b.doStuff(); // Calls b.a(), ((Derived)b).b(), b.c() 
    } 
} 
1

您應該始終封裝您的代碼,以限制訪問權限以滿足所需的準確訪問級別。當您只需要允許訪問包內的代碼或其子類時,使用受保護的修飾符。我不明白你的意思的...

一類概念的方法可分爲:構造制定者/從客戶端使用的getter方法(即其他類)內部方法(從其他方法使用類)

只需將您需要標記爲「受保護」的訪問修飾符面前即可。

3

我發現它有用的一種情況是當超類的方法打算調用子類的方法時,

public abstract class SuperClass 
    public final void exposedMethod { 
     hiddenMethod(); 
    } 

    protected void hiddenMethod(); 
} 

public class SubClass extends SuperClass { 
    protected void hiddenMethod() { } 
} 

在這種情況下exposedMethod照顧之類的東西記錄和重試邏輯,而hiddenMethod是實際的方法實現

+0

那麼不同的子類對不同的東西使用相同的方法名?就像在applet之間使用不同的paint()方法一樣。 –

+0

@huseyin tugrul buyukisik或者在一種情況下'exposedMethod'會從隊列中移除一條消息並將其傳遞給'hiddenMethod',並且每個子類都有不同的處理消息的方式;那麼'exposedMethod'會在隊列上執行一些清理操作 - 擔心的是執行'hiddenMethod'的人會忘記執行清理操作,所以這些被移到超類中的最後一個方法 –

+0

可以看到exposedMEthod的局部變量? –

1

在Java API中使用了大量的類保護的建設者,讓你只能有實例來自其他物體的物體。示例:Graphics類。它有一個受保護的構造函數,並且獲得Graphics類副本的方法是讓Image對象調用getGraphics()。

8

您使用protected

  • 你的類是專爲繼承 - 你期望庫的用戶從你正在設計類繼承。很多時候,課程將是abstract
  • 類提供了特殊的功能,它的派生類必須是不可見的其他類 - 你知道,派生類必須能夠訪問信息,否則將私人,
  • 派生類必須向基類提供功能 - 請參閱Template Method Pattern以獲取有關此受保護方法使用的信息。

注意protected方法類似於在這個意義上public方法,一旦你把他們在,他們需要留在,只要你支持你的庫。與您可以自由刪除的私有方法不同,protected方法仍然是您班級界面的一部分。

相關問題