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 に答える