作者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