-2

継承についての何か、私はここに2つのクラスを持っています:女性、人間のサブクラス、そして人間、それは実行できますが問題を示しています。

ここで2つの問題:

main.m:29:10:「人間」は「setSexy:」に応答しない可能性があります

main.m:30:10:「人間」は「isSexy」に応答しない可能性があります

main.m

#import <Foundation/Foundation.h>
#import "female.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        human *sexyGirl = [[female alloc] init];

        [sexyGirl setName:@"SexyGirl"];
        [sexyGirl setGender:0];
        [sexyGirl setSexy:1];
        [sexyGirl isSexy];

    }
    return 0;
}

female.h

#import "human.h"

@interface female : human {
    BOOL sexy;
}

@property BOOL sexy;

-(void)isSexy;

@end

human.h

#import <Foundation/Foundation.h>

@interface human : NSObject {
    NSInteger *hp;
    NSString *name;
    BOOL gender;
}

@property (assign, nonatomic) NSInteger *hp;
@property (assign, nonatomic) NSString *name;
@property (assign, nonatomic) BOOL gender;

-(void) walk;

@end
4

2 に答える 2

1

メソッド名はなくisSexy、クラスsetSexy内にありますhuman

これを変更する必要があります human *sexyGirl = [[female alloc] init];

これに female *sexyGirl = [[female alloc] init];

于 2012-12-08T17:29:54.010 に答える
1

あなたがするとき:human *sexyGirl = [[female alloc] init]; あなたは女性を人間にアップキャストします。女性が持っているすべての追加情報(追加の方法)はまだそこにありますが、もはや見えません

それ以降、人間が持っているものでのみ作業できます。または、変数を再度 ダウンキャストします。[(female*)sexyGirl setSexy:1]; [(female*)sexyGirl isSexy]

代わりにそれをダウンキャストして女性として宣言することは決してありません*ずっと

于 2012-12-08T17:40:44.593 に答える