如何在同一个类中调用方法

Cod*_*elp 0 objective-c

我有一个超类,SuperClassYeh和一个子类SubClassYeh.我inheritTest在SuperClassYeh中有方法,我inheritTest在SubClassYeh中重写.我通过调用testSuperAndSelfSubClassYeh中的方法来启动程序.此方法将fromYEH在SuperClassYeh中调用另一个方法.在fromYEH,我想打电话给inheritTestSuperClassYeh.我怎么做?使用SubClassYeh中的[self inheritTest]调用inheritTest,而不是SuperClassYeh.

这是启动整个事情的代码片段

SubClassYeh *testing = [[SubClassYeh alloc] init];
[testing testSuperAndSelf];
Run Code Online (Sandbox Code Playgroud)

这是SuperClassYeh的代码片段

- (void) fromYEH
{
    [self inheritTest]; //Calls the inheritTest in SubClassYeh, not SuperClassYeh
}

- (void) inheritTest
{
    NSLog(@"Testing Indicator. Inside SuperClassYEH inheritTest");
}
Run Code Online (Sandbox Code Playgroud)

这是SubClassYeh的代码片段

- (void) inheritTest
{
    NSLog(@"Testing Indicator. Inside SubClassYeh inheritTest");
}

- (void) testSuperAndSelf
{
    [super fromYEH];  
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 5

你不能,这是Objective-C中继承的预期行为.

如果self是实例SubClassYeh,那么

[self inheritTest]
Run Code Online (Sandbox Code Playgroud)

调用SubClassYeh的实现inheritTest(如果有的话),没有从那里发送该消息物质(子类或超).

[super fromYEH]和之间的唯一区别[self fromYEH]是"fromYEH"消息的查找从超类开始,但它不会改变self作为实例的事实SubClassYeh.

而且你不能阻止在Objective-C中覆盖一个方法(参见如何避免超级类方法被objective-c中的子类覆盖或关于该主题的其他Q&A).

您可以在超类中唯一能做的就是选择不会意外覆盖的方法名称,例如通过在方法名称前加上类名称,如下所示:https://stackoverflow.com/a/17209309/1187415.