类方法也继承吗?

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/…

以上是关于类方法也继承吗?的主要内容,如果未能解决你的问题,请参考以下文章

子类继承父类的构造函数(方法)吗?

java中接口可以实现多个接口吗?

java中接口可以实现多个接口吗

请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成

java 当一个接口被多个类继承时 如何知道是调用的哪个类的实现

java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?