作者uranusjr (←這人是超級笨蛋)
看板MacDev
標題Re: [問題] 怎麼強迫sub class一定要完成某個super …
時間Tue Aug 18 12:59:53 2009
※ 引述《aecho (星空下的鮪魚)》之銘言:
: 如題,
: 像 C++裡,可以在super class裡宣告pure virtual function,
: 然後sub class在compiler時,
: 就會被提醒一定要完成這些pure virtual function。
: 那如果在objective-c 裡,要怎麼做到這樣的事情呢?
: protocol雖然有@require和@optional,
: 但是這種情形很像是,在super class底下是@optional
: 而sub class卻是@require~~
對 C++ 不了解, 不過看最後兩行應該是這樣...
例如你有一個 class 叫 Race, 有兩個 subclass 叫 Asian 和 Caucasian
然後 Asian 和 Caucasian 都有 method -dressUp
所以你打算在 Race 裡加上這個方法, 但不希望 Race 裡的方法被呼叫
那你可以在 Race.m 裡的 -dressUp 呼叫 NSException 的 +raise: format:
這樣如果呼叫了 Race 的 -dressUp, 或者呼叫 subclass 的 -dressUp 而忘了覆寫
編譯器應該就會丟出 exception 讓你知道
好像還有一種作法是用 NSObject 的 -doesNotRecognizeSelector:
可以自己去查查參考文件實驗看看, 我沒試過...
這東西好像叫做 abstract methods, 不知道跟你要的一不一樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.72.123
1F:推 atst2:@interface SUPER: NSObject {} @end 08/18 13:42
2F:→ atst2:@interface SUB: SUPER<PROTOCOL> {}@end 08/18 13:43
3F:→ atst2:改成這種做法會不會比較符合原PO想做的事? 08/18 13:43
4F:推 aecho:這個function是會在super class裡呼叫的… 08/18 16:05
5F:→ aecho:但是他會依照sub class的實作,而轉而呼叫sub class所實作的 08/18 16:05
6F:→ aecho:function~~ 08/18 16:06
7F:→ aecho:因為我想把演算法都寫在super class,而由sub class提供不同 08/18 16:06
8F:→ aecho:情形下的實作方法,但都是套用super class一致的演算法 08/18 16:07
9F:→ aecho:謝謝u大 ^^ 我去看一下doesNotRecognizeSelector~~ ^^ 08/18 16:07
10F:→ aecho:的確是abstract methods ^^ 08/18 16:08
11F:→ atst2:有點奇怪,即然super會呼叫到,那所謂sub class不同的實作是? 08/18 18:58
12F:→ atst2:是不是有可能,你的methods權責沒拆乾淨? 08/18 18:59
13F:→ atst2:感覺上你想做的事比較像是template在做的... 08/18 18:59
14F:→ adrianshum:樓上: 參考一下 template method pattern 吧 :) 08/20 10:42