作者adrianshum (Alien)
看板java
標題Re: [問題] 要求繼承的子類別的method一定要呼叫supe
時間Wed Aug 26 19:03:08 2015
※ 引述《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