子类可以在子类中覆盖一个类型吗?
这里的想法是拥有一个形状类,其中包含矩形,方形,圆形等的子类。想知道是否可以覆盖父类中'shapeType'int属性的定义。像这样的东西?
e.g。在globals.h中
#define kShapeType_Rectangle = 1
#define kShapeType_Square = 2
#define kShapeType_Triskaidecagon = 13 // try pronouncing this!
in shape.h
@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模式的经验,但如果存在,有人可以建议我看一下来源吗?
非常感谢!
答案 0 :(得分:1)
没有Objective-C属性是静态变量的概念。 Objective-C属性只是一种语法简写,用于声明两个方法,一个getter和一个setter(或者在readonly
属性的情况下只是一个getter)。您可以覆盖子类中的一个或两个方法,并根据需要从子类中获取和设置值到/的静态变量/值。什么都没有阻止。
在这种情况下,你会这样做:
- (int)shapeType
{
return kShapeType_Rectangle;
}
不要过于哲学,但拥有这样的属性似乎会在类型系统中创建冗余。换句话说,为什么必须在每个子类中覆盖一个属性?在这种情况下,当你知道实例是矩形时,为什么让shapeType
返回kShapeType_Rectangle
?