Objective c 类方法也是继承的吗?
当我定义从Objective c 类方法也是继承的吗?,objective-c,inheritance,subclass,class-method,Objective C,Inheritance,Subclass,Class Method,当我定义从NSObject继承的新类时: @interface Photo : NSObject { NSString* caption; NSString* photographer; } @property NSString* caption; @property NSString* photographer; @end NSObject中的所有类方法(如alloc)是否都由新类Photo继承?是的,Photo可以在子类化时使用a的任何方法/属性/ivar/etc(声明
NSObject
继承的新类时:
@interface Photo : NSObject
{
NSString* caption;
NSString* photographer;
}
@property NSString* caption;
@property NSString* photographer;
@end
NSObject
中的所有类方法(如alloc
)是否都由新类Photo
继承?是的,Photo
可以在子类化时使用a的任何方法/属性/ivar/etc(声明为@private
的ivar除外):
更多关于@private
->
可能需要修改您的答案:方法和属性都没有访问级别(例如,
@private
),甚至可以通过Objective-C运行时访问IVAR(确实有访问级别)。编译器指令@private
仅适用于实例变量,而不适用于方法。此外,点语法不应用于调用除访问器方法以外的任何方法,并且NSObject
没有任何访问器。来自Objective-C编程指南:“Objective-C还提供了一个点(.)操作符,它为调用对象的访问器方法提供了简洁方便的语法。”我不相信这能回答问题;示例中的所有方法都是实例方法,但问题是关于类方法的。也就是说,类方法确实是继承的,因为类的元类是超类元类的子类。
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]);