1

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

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

和一个像这样初始化的子类:

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

有没有办法做到以下几点:

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

年龄将转到子初始化方法,而“值”和“名称”将转到父方法?还是每个孩子都必须期待它期望的所有参数并使用 [super init] 将其传递给父母?

4

2 回答 2

3
- (id)initWithAge:(int)a value:(int)val name:(NSString *)n
{
    self = [super initWithValue:val name:n];
    if(self)
    {
        age = a;
    }
    return self;
}
于 2013-02-19T03:54:34.793 回答
0

Child中,您必须声明initWithAge: value: name:. 如果您没有做一些工作,任何事情都不会明确地“转到父级”方法。

您将在 Child 中声明 amethod:

-(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;
}

您可以将某些东西传递给超类,但只有它所期望的,不会为您创建方法。

阅读了继承多态性,了解什么是自我很重要。

于 2013-02-19T03:57:22.210 回答