我的問題是關於「受保護的」訪問修飾符。當我需要使用受保護的訪問修飾符
我知道它的功能,但我不知道什麼時候需要使用它。一類 概念方法可分爲: 構造 制定者/吸氣從客戶端使用 方法(即其他類) 內部方法(類中的其他方法的使用)
我的問題是關於「受保護的」訪問修飾符。當我需要使用受保護的訪問修飾符
我知道它的功能,但我不知道什麼時候需要使用它。一類 概念方法可分爲: 構造 制定者/吸氣從客戶端使用 方法(即其他類) 內部方法(類中的其他方法的使用)
使用它時,你需要做的一些內部的東西沒有暴露在公共API中,但仍然需要被子類覆蓋。
當你希望後代類能夠看到超類的字段/方法時,你需要使用受保護的訪問修飾符,但是你不希望其他類看到這些。
受保護方法的主要用法是,類期望其派生類覆蓋具有其自身功能的方法,以及調用基類版本。
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()
}
}
您應該始終封裝您的代碼,以限制訪問權限以滿足所需的準確訪問級別。當您只需要允許訪問包內的代碼或其子類時,使用受保護的修飾符。我不明白你的意思的...
一類概念的方法可分爲:構造制定者/從客戶端使用的getter方法(即其他類)內部方法(從其他方法使用類)
只需將您需要標記爲「受保護」的訪問修飾符面前即可。
我發現它有用的一種情況是當超類的方法打算調用子類的方法時,
public abstract class SuperClass
public final void exposedMethod {
hiddenMethod();
}
protected void hiddenMethod();
}
public class SubClass extends SuperClass {
protected void hiddenMethod() { }
}
在這種情況下exposedMethod
照顧之類的東西記錄和重試邏輯,而hiddenMethod
是實際的方法實現
在Java API中使用了大量的類保護的建設者,讓你只能有實例來自其他物體的物體。示例:Graphics類。它有一個受保護的構造函數,並且獲得Graphics類副本的方法是讓Image對象調用getGraphics()。
您使用protected
時
abstract
。注意protected
方法類似於在這個意義上public
方法,一旦你把他們在,他們需要留在,只要你支持你的庫。與您可以自由刪除的私有方法不同,protected
方法仍然是您班級界面的一部分。
那麼不同的子類對不同的東西使用相同的方法名?就像在applet之間使用不同的paint()方法一樣。 –
@huseyin tugrul buyukisik或者在一種情況下'exposedMethod'會從隊列中移除一條消息並將其傳遞給'hiddenMethod',並且每個子類都有不同的處理消息的方式;那麼'exposedMethod'會在隊列上執行一些清理操作 - 擔心的是執行'hiddenMethod'的人會忘記執行清理操作,所以這些被移到超類中的最後一個方法 –
可以看到exposedMEthod的局部變量? –