Objective c 如何覆盖父属性(将父属性重新声明为静态变量)?

Objective c 如何覆盖父属性(将父属性重新声明为静态变量)?,objective-c,inheritance,concept,Objective C,Inheritance,Concept,在父类中是否可能有子类覆盖的类型 这里的想法是有一个shape类,包含矩形、正方形、圆形等子类。想知道是否有可能覆盖父类中“shapeType”int属性的定义。像这样的 e、 g.在globals.h中 #define kShapeType_Rectangle = 1 #define kShapeType_Square = 2 #define kShapeType_Triskaidecagon = 13 // try pronouncing this! 在形状上 @interface sha

在父类中是否可能有子类覆盖的类型

这里的想法是有一个shape类,包含矩形、正方形、圆形等子类。想知道是否有可能覆盖父类中“shapeType”int属性的定义。像这样的

e、 g.在globals.h中

#define kShapeType_Rectangle = 1
#define kShapeType_Square = 2
#define kShapeType_Triskaidecagon = 13 // try pronouncing this!
在形状上

@interface shape : NSObject
   @property int shapeType;
   @property int shapeID;
   @property UIColor shapeColor;
@end
....
在矩形中

#import globals.h

@interface rectangle : shape
    @property static (nonatomic, readonly) int shapeType = kShapeType_Rectangle;  // how do I get this working?
@end
所以有两个问题:

1) 这样的事情可能发生吗?例如,将父属性重新声明为静态变量

2) 对(1)是或否,这是这类事情的最佳编码方式吗?我对Obj-C模式没有经验,但如果有,有人能给我推荐一个源代码吗


非常感谢

没有将Objective-C属性作为静态变量的概念。Objective-C属性只是声明两个方法的语法缩写,一个getter和一个setter(或者在
readonly
properties的情况下只是getter)。您可以在子类中重写其中一个或两个方法,如果需要,可以让它们从/设置子类中的静态变量/值。没有什么可以阻止

在这种情况下,您可以执行以下操作:

- (int)shapeType
{
    return kShapeType_Rectangle;
}

不要太过哲学化,但拥有这样一个属性似乎是在创建类型系统的冗余。换句话说,为什么在每个子类中都有一个必须重写的属性?在这种情况下,当您知道实例是一个矩形(因为它属于矩形类)时,为什么要使用
shapeType
return
kShapeType\u Rectangle
?抱歉,还是一个伪stackoverflow新手…标题本身不需要。它列在标签中。第一个标记也显示在站点标题中@Snowbound谢谢@ipmcc的回复,我想要一个类型属性/函数,这样就可以传递shape,但我想我明白你的意思了。它确实使类系统变得冗余,不是吗我选择了if([myShape isMemberOf:[rectangle class]]):D