obj-c编程04:类的继承
来源:互联网 发布:济南企业软件 编辑:程序博客网 时间:2024/04/30 06:41
这第4篇内容比较少,主要说的是obj-c中的类的继承,需要说明的是我只是写了继承中最简单的形式,如果全部展开来说,那就多了去了!关键是现在肚子里还没装够墨水,没法展开啊!
下面的代码中,我们写了2个类:父类A和子类B,然后B中对A中的方法做了重写。
#import <Foundation/Foundation.h>@interface A:NSObject{int i;}@property int i;-(void)print;@end@implementation A@synthesize i;-(void)print{NSLog(@"[class A][i:%d]:hello!",i);}@end@interface B:A{int j;}@property int j;@end@implementation B@synthesize j;-(void)print{NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);}@endint main(int argc,char *argv[]){@autoreleasepool{NSLog(@"hello obj-c!");A *a = [[A alloc] init];B *b = [[B alloc] init];a.i = 101;b.i = 1001;b.j = 1002;[a print];[b print];}return 0;}
编译运行结果如下:
apple@kissAir: objc_src$clang -fobjc-arc -framework Foundation 1.m -o 1
apple@kissAir: objc_src$./1
2014-06-29 10:34:30.547 1[1035:507] hello obj-c!
2014-06-29 10:34:30.549 1[1035:507] [class A][i:101]:hello!
2014-06-29 10:34:30.549 1[1035:507] [class B:A][i:1001,j:1002]hello!
好,下面我们稍微修改一下class A中实例变量i的定义,使它成为私有,即不在@interface中定义而在@implementation中定义i。这时编译时会发现class B中print会报错:
apple@kissAir: objc_src$clang -fobjc-arc -framework Foundation 1.m -o 1
1.m:34:41: error: instance variable 'i' is private
NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);
改正也很简单呢,直接 self.i即可,下面是修改后的完整代码:
#import <Foundation/Foundation.h>@interface A:NSObject@property int i;-(void)set_i:(int)i;-(void)print;@end@implementation A{int i;}@synthesize i;-(void)set_i:(int)i_v{i = i_v;}-(void)print{NSLog(@"[class A][i:%d]:hello!",i);}@end@interface B:A{int j;}@property int j;@end@implementation B@synthesize j;-(void)print{NSLog(@"[class B:A][i:%d,j:%d]hello!",self.i,j);}@endint main(int argc,char *argv[]){@autoreleasepool{NSLog(@"hello obj-c!");A *a = [[A alloc] init];B *b = [[B alloc] init];//a.i = 101;//b.i = 1001;[a set_i:99];[b set_i:199];b.j = 1002;[a print];[b print];}return 0;}
[2014-06-30 第一次增加内容:实例变量的可见性]:
我们上面谈到了定义类实例变量的语法,其实对于实例变量的可见范围还可以进一步细化控制,主要有4种可见性,默认是第1种:
1 @protected:实例变量可以被该类和子类直接访问(默认);
2 @private:实例变量只能被该类方法访问;
3 @public:实例变量可以被该类,子类以及外部方法访问(需要用->语法,见下面代码);
4 @package:在64位映像中,实例变量可在映像的任何位置被访问。(不太明白哦)
下面上代码吧:
#import <Foundation/Foundation.h>@interface A:NSObject{@privateint pri_i;@protectedint i;@publicint pub_i;}@property int i,pri_i;-(void)set_i:(int)i;-(void)print;@end@implementation A@synthesize i=i,pri_i=pri_i;-(void)set_i:(int)i_v{i = i_v;}-(void)print{NSLog(@"[class A][i:%d,pri_i:%d,pub_i:%d]:hello!",i,pri_i,pub_i);}@end@interface B:A{int j;}@property int j;@end@implementation B@synthesize j;-(void)print{//NSLog(@"[class B:A]pri_i : %d",pri_i); ERR!pri_i is privated!NSLog(@"[class B:A][i:%d,j:%d]hello!",i,j);}@endint main(int argc,char *argv[]){@autoreleasepool{NSLog(@"hello obj-c!");A *a = [[A alloc] init];B *b = [[B alloc] init];a->pub_i = 10;b->pub_i = 20;//a.i = 101;//b.i = 1001;[a set_i:99];[b set_i:199];b.j = 1002;[a print];[b print];}return 0;}
- obj-c编程04:类的继承
- OBJ-C类的继承和派生学习笔记
- obj-c编程09:块的语法
- obj-c编程13:归档
- obj-c编程01:第一个类和对象的范例
- obj-c编程05:类的多态与id动态绑定
- obj-c编程03:多个参数方法的定义
- obj-c编程18:多对多的观察者模式
- obj-c编程02:给类自动合成存取方法
- obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]
- obj-c编程07:异常处理
- obj-c编程08:分类和协议
- obj-c编程12:复制对象
- obj-c编程16:键值编码(KVC)
- obj-c编程17:键值观察(KVO)
- obj-c编程19:关联对象
- 12obj-c的优缺点
- C++-类的继承
- 【iOS开发】 制作gif动态图
- Handler和HandlerThread
- UIBezierPath贝塞尔曲线
- 人人笔试题 截取html字符串
- spring2.5企业级开发
- obj-c编程04:类的继承
- 【Unity 3D】学习笔记二十二:unity游戏脚本(二)
- 计算器
- 统计二叉树叶子节点的个数
- JavaBean
- rootfs下目录的建立--sys_mkdir()
- Ubuntu14.04建立Eclipse快捷方式
- 计算器
- CentOS 安装Sqlite3