2016-07-05 25 views
0

抽象スーパークラス(「シェイプ」など)を持ち、2つのサブクラス(「サークル」や「トライアングル」など)があるとします。 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 

だから、シェイプサブクラスのインスタンスは、identifySelfを呼び出し、それ自身のクラスのIAMAメソッドを利用することができるはずです。 Swiftでは、私はSelfキーワードでこれを行います。どのようにObjective-Cでこれを行うことができますか? (ありがとう、問題を明確にする必要がある場合はお知らせください)

答えて

2
- (void)identifySelf { 
    [[self class] iAmA]; 
} 
関連する問題