目标C父方和子方共享的方法

时间:2013-02-19 03:36:10

标签: objective-c

假设我有一个像这样的父init方法:

- (id)initWithValue:(int)val name:(NSString *)n 
{
    value = val;
    name = n;
}

和一个带有init的子类,如下所示:

- (id)initWithAge:(int)a
{
    age = a;
}

有没有办法执行以下操作:

[Child initWithAge:10 value:12 name:@"Sam"];

其中年龄将转到子init方法,“value”和“name”转到父方法?或者每个孩子都必须期望它所期望的所有参数并使用[super init] ??

将其传递给父级

2 个答案:

答案 0 :(得分:3)

- (id)initWithAge:(int)a value:(int)val name:(NSString *)n
{
    self = [super initWithValue:val name:n];
    if(self)
    {
        age = a;
    }
    return self;
}

答案 1 :(得分:0)

Child中,您必须声明initWithAge: value: name:。没有你的一些工作,没有什么能明确地“转向父母”方法。

你会在Child中声明一个方法:

-(id)initWithAge:(int)age value:(iint)value name:(NSString*)name {
    if ( (self = [super initWithValue:value name:name]) ) {
        _age = age; // assuming you an ivar '_age'
    }
     return self;
}

你可以将某些东西传递给超类,但只有它所期望的东西,没有什么能为你创造方法。

已阅读inheritancepolymorphism,了解self是什么非常重要。