0

子类覆盖的父类中可能有一个类型吗?

这里的想法是有一个形状类,具有矩形、正方形、圆形等的子类。想知道是否可以覆盖父类中“shapeType”int 属性的定义。像这样的东西?

例如在 globals.h

#define kShapeType_Rectangle = 1
#define kShapeType_Square = 2
#define kShapeType_Triskaidecagon = 13 // try pronouncing this!

在形状.h

@interface shape : NSObject
   @property int shapeType;
   @property int shapeID;
   @property UIColor shapeColor;
@end
....

在矩形.h

#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 模式方面没有经验,但如果存在的话,有人可以建议我看看的来源吗?

非常感谢!

4

1 回答 1

1

没有 Objective-C 属性静态变量的概念。Objective-C 属性只是声明两个方法的语法简写,一个 getter 和一个 setter(或者在readonly属性的情况下只是一个 getter)。如果需要,您可以覆盖子类中的一个或两个方法,并让它们从/到子类中的静态变量/值获取和设置值。没有什么可以阻止这一点。

在这种情况下,您可以这样做:

- (int)shapeType
{
    return kShapeType_Rectangle;
}

不要太哲学化,但拥有这样的属性似乎会与类型系统产生冗余。换句话说,为什么在每个子类中都有一个必须重写的属性?在这种情况下,当您知道实例是矩形时,为什么要shapeType返回,因为它属于矩形类?kShapeType_Rectangle

于 2013-07-21T14:09:02.740 回答