这里的第一个问题,我已经四处寻找,我担心我不知道我要做的事情的确切术语 - 如果已经被问到,请不要攻击我。指出我正确的方向,我会读。
我有班级:
“形状”(对于NSObject)
“形状”的子类包括:
“circle”等 - 每个都有各自的calcArea(计算面积)方法。
我的子类工作得很好,因为个人得到类“Circle”来设置ivars(在“Shape”中使用“Shape”方法并继承它们,然后使用那些来计算区域。
我想做什么: 我希望能够为“Shape”对象设置参数。然后我希望这些参数能够逐渐渗透到每个子类(“Circle”,“Triangle”等),这样我就可以输入两个参数,它可以从每个子类中获得我所有的面积和周长计算。例如,每个子类方法都是相同的“calcArea”。
理论:
-Brute强制我在main方法中使用2个变量来重置每个子类的每个参数。 这看起来效率很低,但是很有效。
- 使用“id”,基本上使这个对象通过每个子类在“Shape”中创建参数,然后循环遍历每个子类,直到完成所有子类。尝试了几件事,无法弄明白。
- 在“Shape”中创建一个对象,然后执行其子类的每个函数 - 这听起来很糟糕,我读过的,超类不应该知道它们的子类做了什么......我可以在“Shape”中创建一个方法“那执行[myCircle calcArea]和[myTriangle calcArea]?
- 我正在设计这个程序错误。
提前感谢您的帮助!
答案 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;
}