Objective-C私有变量继承问题

    写这篇博客之前,我得推荐一本书——Objective-C程序设计(第6版)英文版,也就是 Objective-C Programming (Sixth Edition)。

    感觉国内关于ObjC的入门书籍要么写的很烂,要么翻译的很烂。而这本书非常好,由浅及深。一定要看英文版,别看中文版。

    然后第二点推荐的就是用Mac OS自带的clang编译器在命令行中敲代码编译,这也是我的部门老大给我的建议,在初学的时候去工具化。所以我是用bash command line tool + clang compiler + vim editor. 配好vim后码代码的效果如下所示,全屏的!很炫酷!有木有!


    好了,可以开始正文了。

    ObjC有个特性就是当你在接口中的变量前面加上关键字@property,并在实现中给这个变量加关键字@synthesize后,系统会自动给你设置好set方法。不过需要注意的是加关键字后变量变成了私有的了。

    那么问题来了,如果在父类中被关键字声明的变量x,我要在子类中使用它怎么破?

    一开始我直接用x来引用,结果不行。

    不过我后来联想到C++,然后使用super.x就可以引用到父类变量了,或者用self.x也行。

    具体看代码如下:

#import <Foundation/Foundation.h>

@interface ClassA: NSObject
@property int x;
-(int) getX: (int) d;
@end

@implementation ClassA
@synthesize x;
-(int) getX: (int) d
{
  return x;
}
@end

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

@implementation ClassB
-(void) print
{
  NSLog(@"%i", super.x); // self.x or super.x is both OK
}
@end

int main(int argc, char *argv[])
{
  @autoreleasepool {
    ClassB *b = [[ClassB alloc] init];
    [b setX: 100];
    [b print];
  }
  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值