推 darktt: 理論上是Basenji的bark,不過為什麼會出現錯誤就不明瞭了 11/03 21:49
→ darktt: 建議描述一下你是怎麼運行它的 11/03 21:49
→ angelina877: 為什麼是Basenji的bark?? 11/03 21:53
Dog.h
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (NSString*) bark ;
- (NSString*) speak ;
@end
Dog.m
#import "Dog.h"
@implementation Dog
- (NSString*) bark {
return @"Woof!";
}
- (NSString*) speak {
return [self bark];
}
@end
Basenji.h
#import "Dog.h"
@interface Basenji : Dog
- (NSString*) bark;
@end
Basenji.m
#import "Basenji.h"
@implementation Basenji
- (NSString*) bark {
return @"123"; // empty string, Basenjis can't bark
};
@end
main.m
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Basenji.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Basenji* b = [Basenji new];
NSString* s = [b speak];
NSLog(@" %@ .",s);//修改後
}
return 0;
}
※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:00:44
推 darktt: self指的是這個instance,另外你override bark了,那bar 11/03 22:02
→ darktt: k的method指標會指向Basenji class 11/03 22:02
→ darktt: [b speak]->[b bark](不管有沒有override) 11/03 22:05
→ darktt: 沒有就會得到Woof,有就會得到123 11/03 22:06
→ darktt: 另外,你得不到東西是正常的,因為這個程式在運行完畢時會 11/03 22:08
→ darktt: 馬上終止,所以看不到任何東西 11/03 22:09
→ darktt: 想要印出資訊的話請用NSLog 11/03 22:10
[b speak]->[b bark]
這句話看不懂
沒有就會得到Woof,有就會得到123
這句話的意思是
如果我在Basenji class 沒有bark method得到Woof
如果我在Basenji class 有寫bark method得到123
理解對嗎?
※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:29:51
→ yr: 但是你沒有把它印出來啊.... 11/03 22:31
※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:41:38
→ Obama19: 設斷點用lldb印 你這邊猜要猜到民國幾年 11/04 11:29
→ tom19830924: 啊不就繼承 先去看看物件導向的繼承在說啥啊 11/04 14:12
推 powerwolf543: 就override method了啊 11/09 00:18
→ angelina877: 懂了 謝謝大家 11/11 22:12