假设我有一个像这样的父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] ??
将其传递给父级答案 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;
}
你可以将某些东西传递给超类,但只有它所期望的东西,没有什么能为你创造方法。
已阅读inheritance和polymorphism,了解self是什么非常重要。