您正在編寫一個庫,並且希望客戶端實例化從MyClass繼承的MyCustomClass。但客戶端不應該實例化MyClass。
方法1:您實際上並不需要或想要隱藏MyClass。你只是想避免實例化它的實例。
- 一)使其構造私人
- B)創建,創建MyCustomClass的實例的工廠方法。
該工廠可能是MyClass的一部分,或者它可能在其他地方。
@implemenation MyClass
+ (MyCustomClass*) createWith: (Param*) someData;
方法2:考慮組成,而不是繼承。讓MyCustomClass 自己 MyClass類型的對象,並讓它做所有的工作:
@implementation MyCustomClass
@property (nonatomic,strong) MyClass* myClassInstance;
- (void) doSomething
{
[self.myClassInstance doSomething];
}
由於客戶無法繼承MyClass的,無論如何,繼承是一個實現細節。當你不需要時不要繼承。
方法3:你確定你真的想公開MyCustomClass嗎?它確實是一個對象,還是它是一個協議?也許你的庫應該公開提供接口,MyClass和MyCustomClass都是私有實現。
可能的重複[在ObjC中,我如何隱藏實現一個超類的方法在子類?](http://stackoverflow.com/questions/7507417/in-objc-how-do-i-hide-implementation- a-superclasss-methods-in-a-subclass) – trojanfoe 2013-03-13 14:15:44
感謝trojanfoe,但我實際上希望隱藏整個類的存在,而不是方法。我希望人們能夠繼承MyCustomClass,並且使用所有的方法,但不是原始MyClass的子類(MyCustomClass覆蓋了你看到的一些方法 - 所以我想強制人們通過MyClass使用MyCustomClass)。 – 2013-03-13 15:35:22