0

クラス拡張を実行しようとしており、ジェネリック メソッドから拡張メソッドを呼び出しています。私はそれが可能かどうか疑問に思っていますか?以下は私のコードです。

ClassA.h:

@interface ClassA : NSObject

-(void) method;

ClassA.m:

#import "ClassA.h"

-(void) method{
    NSLog(@"do A");
}

ClassB.h:

@interface ClassB : ClassA

-(void) method;

ClassB.m:

#import "ClassB.h"

-(void) method{
    NSLog(@"do B");
}

そして MainClass.m で

-(void) doMethod {
    ClassA *class = [[ClassB alloc] init];
    [class method];
}

このようなことをしようとしましたが、何も出力されませんでした。これを行うことは可能ですか?「do B」と出力されますか??

4

1 に答える 1

3

コードは正常にコンパイルおよび実行されます ( @interface ClassA.hの小さなタイプミスを除いて、 @interface ClassAにする必要があります)。

cristi:tmp diciu$ cat test.m
#import <Cocoa/Cocoa.h>

@interface ClassA : NSObject
- (void) method;
@end

@interface ClassB : ClassA
-(void) method;
@end

@implementation ClassA
-(void) method{
    NSLog(@"do A");
}
@end

@implementation ClassB
-(void) method{
    NSLog(@"do B");
}
@end

int main()
{
    ClassA *class = [[ClassB alloc] init];
    [class method];
}
cristi:tmp diciu$ gcc test.m -framework Cocoa
cristi:tmp diciu$ ./a.out 
2012-06-21 15:04:22.652 a.out[14408:707] do B

Apple の Objective-C のドキュメントには、継承のしくみに関する章が含まれており、ここからオンラインで入手できます。

于 2012-06-21T12:21:32.467 に答える