这很可能是一个愚蠢的问题,但无论如何。在目标 c 中,在子类的启动方法中,通常设置 self=[super init]。现在, self 属于子类,不需要转换,这意味着(或不......)父类的 init 方法以某种方式返回一个实际上属于子类的对象。
所以我的问题是:我可以在父类中定义其他方法或属性,当从子类调用时返回子类的对象?我认为Java中有类似的东西称为工厂方法,所以也许这个问题并不太离谱..
编辑 1.让我更好地解释我的意思:我知道我可以在 ParentClass 方法中找到,我实际上是在对 ChildClass 类的对象进行操作。这是通过查看[self class]。但是,我想在 ParentClass 中声明一个从子类返回对象的方法,而无需事先知道子类将是哪个类。更好的是,我希望返回的对象甚至不需要正式的转换。
例如,我想要父类中的一个方法,它执行以下操作:
-(ChildClass *) partialCopyOfSelf {
//returns an object which is a partial copy of self (only copying properties that also
// exist in parent class, but such that applying [result class] will yield the child class
// and will require no further conversion
(ChildClass *) copy=[[ChildClass alloc] init];
//now copy stuff
return copy;
}
现在在子类中,我希望能够实现以下类型的东西:
-(MyClass *) copyOfSelf {
MyClass *copy=[super partialCopyOfSelf];
// now copy properties that only exist in my child class
return copy;
}
编辑 2(来自我写给@wbyoung 的评论)。我想要这个的原因是,在某些时候我可能想将父类的属性从 ivars 更改为可能只是计算一些值,例如,所以孩子不知道如何正确复制它们。我写这篇文章是因为有人可能对如何完成相同的任务有更好的想法。