2010-09-19 116 views
0

這可能是一個愚蠢的問題,但我還沒有找到任何有關它的信息。是否可以在接口聲明中聲明一個超類的鏈?

假設我的程序中的幾個類派生自從另一個類UIViewController派生的'MySubView'。

我將宣佈這樣的:

@interface NewViewController : MySubView { 
    // code ... 
} 
@end 

在未來的客戶需要改變,並希望與一個表中的另一視圖。所以我需要創建另一個名爲MySubTableView的類,它是從MySubView中分類的UITableViewController。

我想這將是更容易,如果我可以做這樣的事情:

@interface NewViewController : UITableViewController : MySubView { 
    // code ... 
} 
@end 

但是,這是行不通的。

有沒有辦法與Xcode做到這一點,還是我必須專門製作類本身?

編輯:

我不尋找多繼承。直繼承層次將遵循:

NewViewController
的UITableViewController
MySubView
的UIViewController

+0

正如其他人所說,你不能這樣做。但是我對你的情況還是有點不清楚,爲什麼這很有用。這聽起來像你要求的*就像*(儘管不是技術上)多重繼承。如果您想獲得特定的設計幫助,請發佈您想要使用表視圖與類的非表視圖版本完成的更多細節。 – 2010-09-19 20:01:18

回答

2

沒有,Objective-C的不支持,宣佈這些類型的(垂直)的繼承鏈。您只能指定直接超類。

即使有可能,也會有像調用正確的初始化程序這樣的問題,因爲它們不會被自動調用。考慮類似A : B : C的分層結構 - 現在您可以使用例如初始化B[super init]A的初始值設定項中,但B怎麼知道你想讓它調用哪個初始化項?C

+0

這很有道理。感謝Georg和其他人。 – 2010-09-19 20:07:11

1

Objective-C不支持多繼承......但Objective-C程序員很少會錯過它,因爲您可以使用Categories來完成許多相同的任務。閱讀Objective-C類別。

+0

分類搖滾! – 2010-09-19 19:58:53

+0

+1 - 這也是我建議的。如果你希望你的子類基本上替換UIView,那麼除非你重寫方法,而是創建一個UIView的類並以這種方式添加你的函數。一個類別基本上是將自己的方法添加到別人的類中的一種方法。 – 2010-09-19 20:01:57

+0

OP沒有提到MI,而是垂直繼承。雖然類別無疑是有用的,但它們不會做同樣的事情。 – 2010-09-19 20:05:16