2016-07-05 220 views
0

假設我有一個抽象超類(例如'Shape')並且它有兩個子類(例如'Circle'和'Triangle')。 Shape有一個在Circle和Triangle中被覆蓋的類方法。如果我想要任何給定的Shape自己調用此方法,但我不知道哪個子類將直到運行時調用該方法,我該如何調用它?例如,從抽象超類調用重寫的子類的類方法

@implementation Shape 
+(void)iAmA{ 
NSLog(@"I'm an abstract method"); 
} 

-(void)identifySelf { 
    [???? iAmA]; //call relevant subclass's class method 
} 
@end 

@implementation Triangle 
+(void)iAmA{ 
    NSLog(@"I'm a triangle"); 
} 
@end 

@implementation Circle 
+(void)iAmA{ 
    NSLog(@"I'm a circle"); 
} 
@end 

因此,一個Shape子類的實例應該能夠調用identifySelf,並利用它自己的類的IAMA方法。在Swift中,我會用Self關鍵字來做到這一點。我如何在Objective-C中做到這一點? (謝謝,請讓我知道如果我需要澄清問題)

回答

2
- (void)identifySelf { 
    [[self class] iAmA]; 
}