Re: [問題] 要求繼承的子類別的method一定要呼叫supe

看板java作者 (Alien)時間9年前 (2015/08/26 19:03), 9年前編輯推噓2(209)
留言11則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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

08/26 21:17, , 1F
這也是一種方式
08/26 21:17, 1F

08/27 13:12, , 2F
08/27 13:12, 2F

08/27 13:32, , 3F
推 自己也常用這種方式
08/27 13:32, 3F

08/27 13:34, , 4F
不過這個寫法的缺點是不能控制super的呼叫時機
08/27 13:34, 4F

08/28 07:11, , 5F
樓上:反過來想,super.method() 的時機你可以控制在
08/28 07:11, 5F

08/28 07:12, , 6F
恰當的時候做,而不是讓 child 亂 call
08/28 07:12, 6F

08/28 13:54, , 7F
對阿 所以當child需要有可能調整super的時機時不適用
08/28 13:54, 7F

08/28 13:55, , 8F
有可能需要
08/28 13:55, 8F

08/28 13:57, , 9F
畢竟這個寫法已經脫離"要求child一定要super"的需求了
08/28 13:57, 9F

08/28 20:56, , 10F
有這種需求自然有方法去解決啦 :) 通常會
08/28 20:56, 10F

08/28 20:56, , 11F
preA(); super.a(); postA(); 之類
08/28 20:56, 11F
文章代碼(AID): #1LtPplxP (java)
文章代碼(AID): #1LtPplxP (java)