協議是否可以私下繼承,以便在下一個繼承級別不應該訪問?目標c是否支持協議的私有繼承
2
A
回答
4
被覆蓋Objective-C的沒有「私有繼承」(或「私人一致性」)C++那樣的方式。
您可以遵守協議,而不必在頭文件中宣傳您的一致性。
@interface MyObject() <NSCoding>
@end
聲明一個類擴展,增加了NSCoding
議定書MyObject
類:例如,你可以,如果你把這個上面你@implementation
語句進行.m
文件符合NSCoding
「祕密」。
然而,任何人(包括子類),可以問你是否採用協議:
[[MyObject class] conformsToProtocol:@protocol(NSCoding)]
// returns YES
[[MySubObject class] conformsToProtocol:@protocol(NSCoding)]
// also returns YES, if MySubObject is a subclass of MyObject
,任何人都可以發送NSCoding
消息到MyObject
由第一投射對象:
[(id<NSCoding>)someObject encodeWithCoder:someCoder]
如果您創建了MyObject
的子類,並且您的子類也聲明它符合NSCoding
,那麼幾乎可以肯定需要從其自己的encodeWithCoder:
中調用[super encodeWithCoder:]
HOD。
0
不,這是不可能的,因爲語言設計。
此外,因爲任何方法都可以被覆蓋,所以如果來自正確的類別,則無法確定被調用的方法。
可能有一些黑客可以直接使用調用您想要的方法,但這並不容易,甚至可能無法實現。
0
協議或以其它方式,也沒有辦法阻止方法由子類
相關問題
- 1. 目標c繼承/協議混淆:UITableViewController
- 2. 繼承支持的目標c
- 3. 是否支持CSS繼承
- 4. OpenLDAP是否支持繼承?
- 5. C語言是否支持繼承?
- 6. C#是否支持多重繼承4.0?
- 7. 是否可以繼承UiApplicationDelegate協議?
- 8. 類是否繼承objective-c中的協議?
- 9. StackDriver是否支持Syslog協議?
- 10. 施樂DocuShare是否支持CMIS協議?
- 11. Azure IoT Hub是否支持CoAP協議?
- 12. iPad是否支持file://協議?
- 13. VM協議是否支持兩個JVM?
- 14. Windows Azure是否支持SPDY協議?
- 15. C#中的私有繼承?
- 16. 屬性是否支持繼承?
- 17. .net BinaryFormatter是否支持繼承?
- 18. 房間是否支持實體繼承?
- 19. E語言是否支持多繼承?
- 20. mod_mono是否支持web.config繼承?
- 21. 協議方法的繼承
- 22. 繼承協議的URL
- 23. Objective-C協議vs繼承與擴展?
- 24. 支持繼承
- 25. C++ - defenition - 私有繼承
- 26. 協議繼承在swift中
- 27. 繼承通用協議
- 28. 使用Swift協議繼承
- 29. 是否有支持協議相關URL的URL縮短服務?
- 30. 目標C是否支持caldav?
我想(meta-)的問題是「你爲什麼要這麼做?」 – nielsbot 2012-08-08 07:37:17
@nielsbot我會說這個元問題。 :) – 2012-08-08 07:38:00
通過私下繼承「我的意思是,如果我繼承了一個協議」ProtocolBase「,以便它的回調應該是同一個對象(類A),但是當我們繼承這個類到另一個類時,假設B然後b不應該得到協議功能超載 – vinsi 2012-08-08 07:52:40