Objective-C,无法正确地将ivars继承到子类和方法

时间:2012-02-26 21:47:21

标签: objective-c oop methods subclass superclass

这里的第一个问题,我已经四处寻找,我担心我不知道我要做的事情的确切术语 - 如果已经被问到,请不要攻击我。指出我正确的方向,我会读。

我有班级:
“形状”(对于NSObject)
“形状”的子类包括:
“circle”等 - 每个都有各自的calcArea(计算面积)方法。

我的子类工作得很好,因为个人得到类“Circle”来设置ivars(在“Shape”中使用“Shape”方法并继承它们,然后使用那些来计算区域。

我想做什么: 我希望能够为“Shape”对象设置参数。然后我希望这些参数能够逐渐渗透到每个子类(“Circle”,“Triangle”等),这样我就可以输入两个参数,它可以从每个子类中获得我所有的面积和周长计算。例如,每个子类方法都是相同的“calcArea”。


理论:
-Brute强制我在main方法中使用2个变量来重置每个子类的每个参数。 这看起来效率很低,但是很有效。

- 使用“id”,基本上使这个对象通过每个子类在“Shape”中创建参数,然后循环遍历每个子类,直到完成所有子类。尝试了几件事,无法弄明白。

- 在“Shape”中创建一个对象,然后执行其子类的每个函数 - 这听起来很糟糕,我读过的,超类不应该知道它们的子类做了什么......我可以在“Shape”中创建一个方法“那执行[myCircle calcArea]和[myTriangle calcArea]?

- 我正在设计这个程序错误。


提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话。在OOP子类中继承其超类的所有属性。所以当你有:

@interface Shape : NSObject {
     int _mParam;
}
-(int) calcArea;
@end

您实际上可以在子类中访问_mParam。然后创建子类:

@interface Circle : Shape {
}
-(id) init:(int) param;
-(int) calcArea;
@end

-(id) init:(int) param {
    ....
    _mParam = param;
    ....
}

-(int) calcArea {
    //some calculations here
    return M_PI*r*r + _mParam;
}