2012-06-21 42 views
0

我試圖做一個類擴展,並從泛型方法調用擴展方法。我只是想知道是否有可能做到這一點?以下是我的代碼。如何在Object-C中重寫方法

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」?

+2

請發佈您的實際代碼(此代碼不能編譯)。此外,這個問題是關於方法重寫,而不是類擴展。您可以修復您的標題和標籤以反映這一點。 – Perception

回答

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 

蘋果的Objective-C的文檔包含了如何一章繼承的作品可在線獲得here