看板 java 關於我們 聯絡資訊
※ 引述《LaPass (LaPass)》之銘言: : class A { : void mthodA(){ : //一些重要的東西 : } : } : class B extants A{ : @override : void methodA(){ : super.methodA(); // 如何要求子類別一定要呼叫這行? : } : } : 不知道沒有辦法作到這種限制條件 : 我只看到android的activity : 是採用在執行時檢查這個 : 但有沒有辦法在編譯時期就處理? : 例如用 annotation 之類的方式 一般來說在設計上避過就可以了。 可以參看 Template Method pattern。簡單來說: class A { final void methodA() { // 那麼重要就別讓 child override 了 importantLogic(); doA(); } protected void doA(){ // override 專用 } } class B extends A { @Override protected void doA() { // 保證 importantLogic() 已跑 // B 的額外 logic } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.19.45.239 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1440586991.A.ED9.html ※ 編輯: adrianshum (223.19.45.239), 08/26/2015 19:03:39 ※ 編輯: adrianshum (223.19.45.239), 08/26/2015 19:04:30
LaPass: 這也是一種方式 08/26 21:17
eieio: 推 08/27 13:12
cha122977: 推 自己也常用這種方式 08/27 13:32
cha122977: 不過這個寫法的缺點是不能控制super的呼叫時機 08/27 13:34
adrianshum: 樓上:反過來想,super.method() 的時機你可以控制在 08/28 07:11
adrianshum: 恰當的時候做,而不是讓 child 亂 call 08/28 07:12
cha122977: 對阿 所以當child需要有可能調整super的時機時不適用 08/28 13:54
cha122977: 有可能需要 08/28 13:55
cha122977: 畢竟這個寫法已經脫離"要求child一定要super"的需求了 08/28 13:57
adrianshum: 有這種需求自然有方法去解決啦 :) 通常會 08/28 20:56
adrianshum: preA(); super.a(); postA(); 之類 08/28 20:56