3
@interface A : NSObject

- (void) tmp;
- (void) foo;

@end

@implementation A

- (void) tmp {
    [self foo];
}

- (void) foo {
    NSLog(@"A");
}

@end

派生类

@interface B : A

- (void) foo;

@end

@implementation B

- (void) foo {
    NSLog(@"B");
}

@end

代码

B * b = [[B alloc] init];
[b tmp]; // -> writes out B

有没有办法实现 A,所以在 A 类的 [self tmp] 中调用 [self foo] 会导致调用 A:foo 而不是 B:foo

(所以调用 [b foo] == @"B" 和调用 [b tmp] == @"A" 之后的输出)

喜欢

@implementation A

- (void) tmp {
    [ALWAYS_CALL_ON_A foo];
}
4

2 回答 2

1

You can use super

@implementation B

- (void) tmp {
     [super foo];
}
@end
于 2012-07-04T09:55:52.213 回答
0

Use class methods

@interface A : NSObject {

}
- (void) tmp;
+ (void) foo;
@end

@implementation A
- (void) tmp {
    [A foo];
}

+ (void) foo {
    NSLog(@"A");
}
@end
#import "A.h"
@interface B : A {

}
+ (void) foo;
@end

@implementation B
+ (void) foo {
    NSLog(@"B");
}

@end
于 2012-07-04T09:58:57.260 回答