看板 MacDev 關於我們 聯絡資訊
※ 引述《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
atst2:@interface SUPER: NSObject {} @end 08/18 13:42
atst2:@interface SUB: SUPER<PROTOCOL> {}@end 08/18 13:43
atst2:改成這種做法會不會比較符合原PO想做的事? 08/18 13:43
aecho:這個function是會在super class裡呼叫的… 08/18 16:05
aecho:但是他會依照sub class的實作,而轉而呼叫sub class所實作的 08/18 16:05
aecho:function~~ 08/18 16:06
aecho:因為我想把演算法都寫在super class,而由sub class提供不同 08/18 16:06
aecho:情形下的實作方法,但都是套用super class一致的演算法 08/18 16:07
aecho:謝謝u大 ^^ 我去看一下doesNotRecognizeSelector~~ ^^ 08/18 16:07
aecho:的確是abstract methods ^^ 08/18 16:08
atst2:有點奇怪,即然super會呼叫到,那所謂sub class不同的實作是? 08/18 18:58
atst2:是不是有可能,你的methods權責沒拆乾淨? 08/18 18:59
atst2:感覺上你想做的事比較像是template在做的... 08/18 18:59
adrianshum:樓上: 參考一下 template method pattern 吧 :) 08/20 10:42