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

相关问题