2013-07-21 118 views
0

在子類覆蓋的父類中可能有一個類型?如何覆蓋父屬性(將父屬性重新聲明爲靜態變量)?

這裏的想法是有一個形狀類,有矩形,正方形,圓形等子類。想知道是否可以覆蓋父類中'shapeType'int屬性的定義。像這樣?

例如在globals.h

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

在shape.h

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

在rectangle.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模式方面沒有經驗,但如果有人存在,有人可能會建議我看一下源代碼嗎?

非常感謝!

+0

嗨@盧卡斯,爲什麼'客觀c'位被抽出這個問題?對不起,仍然是一個僞stackoverflow新手... – snowbound

+0

它不是必要的標題本身。它在標籤中列出。第一個標籤也顯示在網站標題中。 @snowbound – Lucas

回答

1

沒有Objective-C屬性的概念的一個靜態變量。 Objective-C屬性只是用於聲明兩個方法的語法縮寫,即getter和setter(或者在屬性爲readonly的情況下只是一個getter)。您可以重寫子類中的這些方法中的一個或兩個,並讓它們根據需要獲取並設置子類中的靜態變量/值的值。沒有什麼可以阻止這一點。

在這種情況下,你可以這樣做:

- (int)shapeType 
{ 
    return kShapeType_Rectangle; 
} 

不要太哲理,但具有這樣的屬性似乎被創建與類型系統冗餘。換句話說,爲什麼你必須在每個子類中重寫一個屬性?在這種情況下,爲什麼shapeType返回kShapeType_Rectangle當你知道該實例是矩形類的矩形?

+0

感謝您的回覆@ipmcc,我想要一個類型屬性/函數,因此可以傳遞形狀,但我想我明白你的意思。它確實使類系統冗餘不是_ _我已經用if([myShape isMemberOf:[矩形類]]):D – snowbound