我问这个问题,看看我对面向对象的工作方式的理解是否正确。假设我有一个抽象的超类,它有几种方法都有某种实现方式。
@interface SuperClass : UIViewController
- (void)methodOne;
// Other public stuff
@end
.......
@implementation SuperClass
- (void)methodOne
{
//some implementation
}
- (someObject *)objectMethod
{
//more implementation
}
@end
然后如果我正在实现它的子类:
@interface SubClass : SuperClass
@end
.......
@implementation SubClass
- (void)methodOne
{
// override method implementation code
}
@end
所以从上面的例子中,如果我创建一个视图控制器,它是一个SubClass类,它实际上会创建一个SubClass对象并自动添加所有SuperClass方法的实现吗?我得到的想法是,当预处理器运行时,它是否采用任何尚未在子类中重写的方法,只是将超类代码方法放入该类中以供其使用?在这种情况下,我只从超类中覆盖'methodOne'方法并单独留下'objectMethod'方法。这是否意味着我的SubClass将使用新的重写'methodOne'实现并使用SuperClasses的'objectMethod'实现?
非常感谢!如果我需要澄清一些事情,请告诉我。
答案 0 :(得分:3)
如果在SubClass实现中重新定义methodOne
,SubClass的实例将使用重新定义的实现。如果SubClass实现没有重新定义,它将查看SuperClass的实现以获得定义。这个过程递归地继续通过更高级的超类,直到它找到一个定义。
如果您想稍微修改SubClass中的定义,您可以执行以下操作:
-(void) methodOne{
// Some code to add before SuperClass's implementation is called
....
// Call SuperClass's implementation
[super methodOne];
// Some code to add after SuperClass's implementation is called
...
}
答案 1 :(得分:1)
是。子类获取所有超类方法。如果重写一个,那么该方法不再具有它的超类实现。因此,在这种情况下,当您实例化子类实例并调用任一方法时,您将获得超类的objectMethod和子类的methodOne。