Re: [問題] 怎麼強迫sub class一定要完成某個super …

看板MacDev作者 (←這人是超級笨蛋)時間16年前 (2009/08/18 12:59), 編輯推噓2(2012)
留言14則, 3人參與, 最新討論串1/2 (看更多)
※ 引述《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

08/18 13:42, , 1F
@interface SUPER: NSObject {} @end
08/18 13:42, 1F

08/18 13:43, , 2F
@interface SUB: SUPER<PROTOCOL> {}@end
08/18 13:43, 2F

08/18 13:43, , 3F
改成這種做法會不會比較符合原PO想做的事?
08/18 13:43, 3F

08/18 16:05, , 4F
這個function是會在super class裡呼叫的…
08/18 16:05, 4F

08/18 16:05, , 5F
但是他會依照sub class的實作,而轉而呼叫sub class所實作的
08/18 16:05, 5F

08/18 16:06, , 6F
function~~
08/18 16:06, 6F

08/18 16:06, , 7F
因為我想把演算法都寫在super class,而由sub class提供不同
08/18 16:06, 7F

08/18 16:07, , 8F
情形下的實作方法,但都是套用super class一致的演算法
08/18 16:07, 8F

08/18 16:07, , 9F
謝謝u大 ^^ 我去看一下doesNotRecognizeSelector~~ ^^
08/18 16:07, 9F

08/18 16:08, , 10F
的確是abstract methods ^^
08/18 16:08, 10F

08/18 18:58, , 11F
有點奇怪,即然super會呼叫到,那所謂sub class不同的實作是?
08/18 18:58, 11F

08/18 18:59, , 12F
是不是有可能,你的methods權責沒拆乾淨?
08/18 18:59, 12F

08/18 18:59, , 13F
感覺上你想做的事比較像是template在做的...
08/18 18:59, 13F

08/20 10:42, , 14F
樓上: 參考一下 template method pattern 吧 :)
08/20 10:42, 14F
文章代碼(AID): #1AYZLB49 (MacDev)
文章代碼(AID): #1AYZLB49 (MacDev)