0

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

@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”方法。这是否意味着我的子类将利用新的覆盖的“methodOne”实现并使用超类的“objectMethod”实现?

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

4

2 回答 2

3

If you redefine methodOne in the SubClass implementation, instances of SubClass will use the redefined implementation. If there is no redefinition the SubClass implementation, it will look to the implementation of SuperClass for a definition. This process recursively continues through higher super classes until it finds a definition.

If you'd like to slightly modify the definition in the SubClass, you could do something like:

-(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
    ...
}
于 2013-08-15T22:54:32.223 回答
1

是的。子类获取所有超类方法。如果您覆盖一个,则该方法不再具有它的超类实现。所以在这种情况下,当你实例化一个子类实例并调用任一方法时,你会得到超类的objectMethod和子类的methodOne。

于 2013-08-15T22:50:27.837 回答