从抽象超类调用重写的子类的类方法

时间:2016-07-05 05:23:00

标签: objective-c oop polymorphism

假设我有一个抽象的超类(例如,' 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中做到这一点? (谢谢,如果我需要澄清问题,请告诉我)

1 个答案:

答案 0 :(得分:2)

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