如何在Objective-C中覆盖方法

时间:2012-06-21 11:20:16

标签: objective-c oop subclass overloading

我正在尝试进行类扩展并从泛型方法调用扩展方法。我只是想知道是否可以这样做?以下是我的代码。

ClassA.h:

@interface ClassA : NSObject

-(void) method;

ClassA.m:

#import "ClassA.h"

-(void) method{
    NSLog(@"do A");
}

ClassB.h:

@interface ClassB : ClassA

-(void) method;

ClassB.m:

#import "ClassB.h"

-(void) method{
    NSLog(@"do B");
}

和MainClass.m

-(void) doMethod {
    ClassA *class = [[ClassB alloc] init];
    [class method];
}

我试着这样做,但没有打印出来。是否有可能做到这一点?它会打印出“做B”吗?

1 个答案:

答案 0 :(得分:3)

您的代码编译并运行正常(减去 @interface ClassA.h 中应该 @interface ClassA 的小错误):

cristi:tmp diciu$ cat test.m
#import <Cocoa/Cocoa.h>

@interface ClassA : NSObject
- (void) method;
@end

@interface ClassB : ClassA
-(void) method;
@end

@implementation ClassA
-(void) method{
    NSLog(@"do A");
}
@end

@implementation ClassB
-(void) method{
    NSLog(@"do B");
}
@end

int main()
{
    ClassA *class = [[ClassB alloc] init];
    [class method];
}
cristi:tmp diciu$ gcc test.m -framework Cocoa
cristi:tmp diciu$ ./a.out 
2012-06-21 15:04:22.652 a.out[14408:707] do B

Apple的Objective-C文档包含有关如何在线提供继承的章节here