我有一个超类,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)
你不能,这是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.
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |