类方法也继承吗?
Posted
技术标签:
【中文标题】类方法也继承吗?【英文标题】:Are class methods inherited too? 【发布时间】:2011-12-15 10:26:50 【问题描述】:当我定义一个继承自 NSObject
的新类时:
@interface Photo : NSObject
NSString* caption;
NSString* photographer;
@property NSString* caption;
@property NSString* photographer;
@end
NSObject
中的所有类方法(如alloc
)都被新类Photo
继承了吗?
【问题讨论】:
【参考方案1】:是的,当您继承 NSObject
时,Photo
可以使用 NSObject
的任何方法/属性/ivar/etc(声明为 @private
的那些 iVar 除外):
Photo *myPhoto;
myPhoto = [[Photo alloc] init];
// ... Do some myPhoto stuff ...
NSLog(@"Photo object: %@", myPhoto);
NSLog(@"Photo description: %@", [myPhoto description]);
NSLog(@"Photo caption: %@", [myPhoto caption]);
NSLog(@"Photo photographer: %@", [myPhoto photographer]);
更多关于@private
-> SO Question: what-does-private-mean-in-objective-c
NSObject
Class Reference
【讨论】:
可能想修改你的答案:方法和属性都没有访问级别(例如@private
。)甚至 ivars(确实有访问级别)也可以通过 Objective-C 运行时访问。
@private
编译器指令仅适用于实例变量,不适用于方法。此外,点语法不应该用于调用访问器方法以外的任何东西,并且NSObject
没有任何访问器。来自 Objective-C 编程指南:“Objective-C 还提供了一个点 (.) 运算符,它提供了一种紧凑且方便的语法来调用对象的访问器方法。” developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
我不相信这能回答问题;示例中的所有方法都是实例方法,但问题具体是关于 class 方法的。
也就是说,类方法确实是继承的,因为类的元类是超类元类的子类。 sealiesoftware.com/blog/archive/2009/04/14/…以上是关于类方法也继承吗?的主要内容,如果未能解决你的问题,请参考以下文章
请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成