【问题标题】: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继承了吗?

【问题讨论】:

    标签: objective-c inheritance subclass class-method


    【解决方案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/…
    猜你喜欢
    • 2012-09-03
    • 2011-03-03
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多