面向对象程序设计的正确概念

时间:2013-08-15 22:44:55

标签: ios objective-c class polymorphism

我问这个问题,看看我对面向对象的工作方式的理解是否正确。假设我有一个抽象的超类,它有几种方法都有某种实现方式。

@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'实现?

非常感谢!如果我需要澄清一些事情,请告诉我。

2 个答案:

答案 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。