[英]Java - Extending private methods in subclasses
我遇到了在子類中擴展/更改私有方法的麻煩。 例如,我正在創建一個從超類繼承的模擬對象,以便在測試中使用。
這是我想更改的父類代碼的示例:
private void build(int skill) {
// switch screen
state = Constants.STATE_GENERATING;
percentdone = 0;
notifyViewerRedraw() ;
// select generation method
switch(method){
case 1 : mazebuilder = new MazeBuilderPrim(); // generate with Prim's algorithm
break ;
case 0: // generate with Falstad's original algorithm (0 and default), note the missing break statement
default : mazebuilder = new MazeBuilder();
break ;
}
}
我知道私有方法不能在子類中覆蓋。 因此,我應該創建一個具有相同簽名的新方法。 我還必須重新創建此類中的所有私有變量嗎? 但是,如果這樣做,我不確定是否會將行為更改為與父類不同,因為我知道實際上為子類中父類的私有變量保留了空間。 因此,我將有重復的私有變量。 我不知道最好的方法是什么。
如果發現需要重寫子類中的方法,則該方法所負責的邏輯可能足夠抽象,可以保證使用public
或protected
方法。
考慮戰略模式的設計。 基本上,不需要重寫private
方法,因為這些方法應該保留給接口之外的東西使用,並且僅特定於該特定的具體類。
對我來說,像build()
一樣不可或缺的東西聽起來像它屬於protected
方法,您的最高超類可能在構造過程中的某個時候使用,但不應在外部調用。 當然,如果可以安全地根據需要多次調用build()
(冪等),例如render()
方法可能在游戲角色類中,那么將其公開並記錄您的期望是安全的它的實現。
我不確定您的程序總體上如何工作,但是如果您希望所有基類共享相同的方法,那么您可能值得研究抽象類和方法(?)
您可以在subclasses方法中調用super(),該方法將調用superclasses方法,然后在subclasses方法中進行所需的額外更改。
編輯:錯誤地閱讀原始問題。 如果方法在超類中具有功能,並且您想擴展或更改它,則不應將其設置為私有。 在您的情況下,Protected是最好的選擇,因為它允許子類使用super()對其進行擴展或僅重寫它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.