2016-10-01 67 views
0

到方法覆蓋較弱的訪問我有一個名爲Module類,它有一個方法onEnable(); 現在我有一類叫做Config,並想使onEnable();方法private,因爲有一個預定義的演技和一類擴展Config應'被允許改變行爲。分配從超

有沒有辦法做到這一點?

class Module{ 

    public void onEnable(){ 

    } 
} 

A延伸類模塊,其被允許使用onEnable

class HelloWorldModule{ 

    @Override 
    public void onEnable(){ 

      System.out.println("Hello, World!"); 

    } 


} 

現在配置類,其中我想,onEnable是私人使得延伸配置類不能!覆蓋onEnable

class Config{ 

    @Override 
    private void onEnable(){ 
    } 


} 

所以現在,一類名爲ProgrammConfig延伸Config不能覆蓋onEnable

但是,這是行不通的,因爲你不能重寫public方法的private方法。

+0

所以'Config'類擴展'Module'類? –

+0

是的。然後還有一些其他類只是擴展Module。但擴展配置的類擴展模塊不應該能夠覆蓋onEnable –

+0

您的要求不是很清楚,您能否重新定義問題和要求。如果可能的話提供一些代碼 –

回答

2

通過聲明的方法爲public,你說,它應該是可以調用這個類的每個實例所述方法,包括子類。在子類中聲明一個方法爲private沒有意義,因此也是不允許的。

現在,如果你關心的子類覆蓋方法,你可以聲明的方法final防止這種情況:

class Config extends Module{ 

    @Override 
    public final void onEnable(){} 
     //Whatever 
    } 
+0

啊,謝謝。正是我搜查的! –

0

你不能用繼承來解決這個問題。如果ConfigModule的子類,則其必須提供具有(至多)相同訪問限制的Module的所有功能。將一個子類想象爲超類的專用版本:它可以完成超類的所有功能,可能更多,但不會更少。

不過您可以根據需要實現一個Config類。剛剛跳過子類,而是使用Module類型的私人領域,像這樣:

class Config { 
    private Module module; 

    public Config() { 
     module = new Module(); 
    } 

    public int SomeFunctionFromModuleYouWantToExpose() { 
     return module.SomeFunctionFromModuleYouWantToExpose(); 
    } 

    // ... 
}