可能重复:
Objective C — narrow instance variable types in subclasses?
我有一个名为ParentClass
的类,它具有UIView
属性。我还有一个名为ChildClass
的类,它是ParentClass
的子类。 ChildClass
显然会继承UIView
属性,但在ChildClass
中,我确定我只会使用UIScrollView
来获取此属性。
我的问题是,是否有可能/可行地以某种方式“子化”UIView
属性,重命名它,并使其成为UIScrollView
?合成时我是否必须覆盖.m文件中的属性?
类似于UITableViewController
的主视图属性为UITableView
而不是UIView
中的UIViewController
。
更新:也许我只是不是属性,而是变量本身。
答案 0 :(得分:2)
只需添加一个具有相同名称的属性到您的子类,但使用UIScrollView而不是UIView
。
答案 1 :(得分:1)
如果您是ParentClass
的子类,其属性为UIView
,您需要ChildClass
才能继承UIScrollView
..您应该只创建UIScrollView
1}} ParentClass
中的属性,因此ChildClass
可以继承并使用它。
如果ChildClass
不会使用UIView
属性,如果您从未初始化它将保持nil
,因此不会耗尽任何内存。如果您选择使用UIView
属性,或者当您选择使用UIScrollView
属性时,也可以给您带来好处。
或者,如果您不想ChildClass
ParentClass
中声明新的{{1}}媒体资源即可
希望这有意义,并且有所帮助!
答案 2 :(得分:0)
属性转换为方法,这些方法可以像任何其他方法一样被覆盖。你可以这样做:
@interface ParentClass {
NSView* myView;
}
@property(retain) NSView* myView;
@end
@implementation ParentClass
@synthesize myView;
@end
@interface ChildClass
@end
@implementation ChildClass
-(void) setMyView:(NSView*)v;
{
if([v isKindOfClass:[UIScrollView class]]){
[super setMyView:v];
} else {
//do whatever error handling you want to here
}
}
@end
-setMyView:
方法是属性转换为的方法之一,因此在ChildClass
中定义它将覆盖父类的方法。
旁注:当您引用“继承”该属性时,正确的术语是“覆盖”。