作者angelina877 (牛牛)
看板MacDev
标题[问题] self用法
时间Tue Nov 3 21:36:48 2015
code
@implementation Dog
- (NSString*) bark {
return @"Woof!";
}
- (NSString*) speak {
return [self bark];
}
@end
@implementation Basenji : Dog
- (NSString*) bark {
return @"";
}
@end
Basenji* b = [Basenji new];
NSString* s = [b speak];
1.这样是呼叫Basenji class的bark method ,还是呼叫Dog class的bark method
2.为什麽我编译後是出现Program ended with exit code: 0
而不是字串?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.171.68.185
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1446557811.A.60C.html
1F:推 darktt: 理论上是Basenji的bark,不过为什麽会出现错误就不明了了 11/03 21:49
2F:→ darktt: 建议描述一下你是怎麽运行它的 11/03 21:49
3F:→ 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
4F:推 darktt: self指的是这个instance,另外你override bark了,那bar 11/03 22:02
5F:→ darktt: k的method指标会指向Basenji class 11/03 22:02
6F:→ darktt: [b speak]->[b bark](不管有没有override) 11/03 22:05
7F:→ darktt: 没有就会得到Woof,有就会得到123 11/03 22:06
8F:→ darktt: 另外,你得不到东西是正常的,因为这个程式在运行完毕时会 11/03 22:08
9F:→ darktt: 马上终止,所以看不到任何东西 11/03 22:09
10F:→ 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
11F:→ yr: 但是你没有把它印出来啊.... 11/03 22:31
※ 编辑: angelina877 (118.171.68.185), 11/03/2015 22:41:38
12F:→ Obama19: 设断点用lldb印 你这边猜要猜到民国几年 11/04 11:29
13F:→ tom19830924: 啊不就继承 先去看看物件导向的继承在说啥啊 11/04 14:12
14F:推 powerwolf543: 就override method了啊 11/09 00:18
15F:→ angelina877: 懂了 谢谢大家 11/11 22:12