有沒有辦法讓超類中的「私有」方法(不在其頭文件中)仍然能夠從子類訪問這些方法?不在超類的頭文件中的繼承方法
0
A
回答
3
你可以使用一個自定義類別,例如:
Stuffy.h
// The "official" header file to be used by almost anyone
@interface Stuffy {
int myMember;
}
- (void) somePublicMethod;
@end
悶+ Secret.h
// The magic header file, which should only be used by knowledgable people
#import "Stuffy.h"
@interface Stuffy (Secret)
- (void) _pseudoProtectedMethod;
@end
Stuffy.m
#import "Stuffy+Secret.h"
@implementation Stuffy
- (void) somePublicMethod {
// ...
}
@end
@implementation Stuffy (Secret)
- (void) _pseudoProtectedMethod {
// ...
}
@end
的子類現在可以在其.m
文件中導入Stuffy.h
,並堅持公開API或導入Stuffy+Secret.h
並使用半保護的內容。
請注意,Objective-C沒有真實的概念protected
或private
方法。基本上,任何人都可以包括Stuffy+Secret.h
並使用在那裏聲明的東西。
+1
Yuck,它的工作原理 - 但仍然...惡作劇! – ColinE
1
你可以「欺騙」幾種方式。除類別之外,您可以簡單地將您的Stuffy
指針指向FunnyStuff
,併爲其指定一個完整的「另一個@interface
」。 (只是不要聲明任何靜力學,也不要做@implementation
。)或者是一個小清潔工,將其轉換爲定義您添加的方法的@protocol
。 (並且,由於您正在創建一個子類,因此您可以簡單地將該協議添加到您的子類定義中,並避免任何投射。)
請記住,Objective-C不要求@implementation
中的每個方法都有在@interface
中的相應聲明和方法調用是完全動態的,有效地包括名稱查找。你唯一需要做的就是誘使編譯器允許調用。 (實際上,如果你不介意編譯器的警告,你可以根本不需要聲明。)
相關問題
- 1. Java的繼承:在超類中調用子類方法
- 2. Perl,Moose - 子類不是繼承超類的方法
- 3. 蟒蛇類調用超類的方法,而不是繼承
- 4. Java繼承:在超類中調用子類方法
- 5. Javascript繼承:從超類的方法設置子類的屬性
- 6. 在React中繼承超類的defaultProps
- 7. 類文件繼承的不是一類
- 8. 如何查看Eclipse中所有超類的繼承(Overideable)方法?
- 9. Java超類繼承
- 10. 方法超載而繼承在C++
- 11. Java反射:從超類的繼承類調用GetDeclaredFields()方法
- 12. C++繼承。對象調用超類方法而不是自己的方法?
- 13. 調用繼承中的子類方法
- 14. python繼承類中的__init__方法
- 15. 跨文件的類繼承
- 16. 在類中繼承多種方法
- 17. 使繼承的方法使用子類的變量而不是超類'
- 18. 繼承usercontrol中的控件的方法
- 19. 繼承 - 在子類中使用super.equals()覆蓋在超類的equals方法中使用的方法
- 20. 從元類繼承方法
- 21. 方法調用繼承類
- 22. 引用類繼承方法
- 23. 從android中的超類繼承數據
- 24. 多個超類的多繼承,C++和相同方法簽名
- 25. 繼承方法不工作從父類
- 26. 繼承不能調用子類方法
- 27. 從繼承類不調用方法
- 28. 其他繼承類中的繼承類
- 29. 超類可以從其子類繼承方法嗎?
- 30. Java類繼承和阻塞超類方法
IOW,你想要受保護的方法。 –
是的。但是在ObjC中沒有這樣的構造,我可以將它從(公共)頭文件中隱藏起來。所以我沒有這樣說。 – fabb
我知道。我只是想澄清你想要什麼。 –