【问题标题】:calling overridden subclass's class method from abstract superclass从抽象超类调用被覆盖的子类的类方法
【发布时间】:2016-07-05 05:22:59
【问题描述】:

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

【问题讨论】:

    标签: objective-c oop polymorphism


    【解决方案1】:
    - (void)identifySelf {
        [[self class] iAmA];
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 2019-12-09
      • 2011-12-13
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多