2
@interface rectangle: NSObject
@property int width, height;
{
     -(int) area;
     -(int) perimeter;
     -(void) setWidth: (int) w andHeight: (int) h;
}
@end

@implementation rectangle
@synthesize width, height;
...
...
@end

我做了一个矩形的正方形子类

@interface square: rectangle
-(void) setSide: (int) s;
-(int) side;
@end


@implementation square
-(void) setSide: (int) s
{
    [self setWidth: s andHeight: s];
}
-(int) side
{
    return self.width;
}

@end

我的主要问题是:为什么我不能这样做

return width;

当我想得到我的方形物体的侧面时。我想

@property int width, height;

只是一个简化的

@interface rectangle: NSObject
{
    int width;
    int height;
}
//getter/setter methods
...
@end

而在书中,如果在@interface 中声明了一个实例变量,它就会被它的子类继承。但是,显然,

return width;

似乎不起作用。为什么会这样?

4

1 回答 1

3

问题是属性的合成是实现的一部分,而不是接口。子类只能依赖接口。

例如,@synthesize 可以指定不同的实例变量名(例如@synthesize width = _my_funky_width;),而子类将无法知道实际的实例变量是什么。

于 2013-03-16T08:39:34.180 回答