这第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);
}
@end int 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);

改正也非常easy呢,直接 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);
}
@end int 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{
@private
int pri_i;
@protected
int i;
@public
int 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);
}
@end int 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:类的继承的更多相关文章

  1. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  2. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  3. python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件

    面向对象编程(OOP)术语: class TestClass(object):   val1 = 100       def __init__(self):     self.val2 = 200   ...

  4. Python 进阶_OOP 面向对象编程_类和继承

    目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...

  5. 3、二、c# 面向对像编程。类,结构、C# 数据类型(引用类型、值 类型、指针类型)、ref参数与out参数、方法的重载、静态类型与静态成员、继承与多态、委托与事件

    一.类 定义类使用class关键字. <access specifier> class class_name { // member variables 成员变量 <access s ...

  6. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  7. Objective-C编程 — 类和继承

    讲述面向对象中的一个重要概念——继承,使用继承 可以方便地在已有类的基础上进行扩展,定义一个具有父 类全部功能的新类. 父类和子类 我们在定义一个新类的时候,经常会遇到要定义的新类是某个类的扩展或者是 ...

  8. 【PHP面向对象(OOP)编程入门教程】11.类的继承

    继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承. 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或 ...

  9. JavaScript 面向对象的编程(三) 类的继承

    定义父类和子类的继承关系 //声明父类 function SuperClass(){ this.superValue = true; } //为父类添加共有方法 SuperClass.prototyp ...

随机推荐

  1. Android适应方案汇总(三)

    在Android适应方案汇总(一个).(两)在.我们理解一些基本概念. 那么详细的开发,我们应该重视起来. 首先,我们需要知道.关键的事实是,这两个适配器: (1).这点在单位的使用上用dp.sp以及 ...

  2. Javascript设计模式系列二

    创建对象的基本模式,一.门户大开型,二.采用下划线来表示属性和方法的私用性,三.使用闭包来创建私用的成员. 一.门户大开型.只能提供公用成员.所有属性和方法都公开的.可访问的.这些共用属性都要使用th ...

  3. Sliverlight之 画刷

    1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...

  4. Lua 服务器Socket通信实例(转)

    local socket = require"socket" local host = "127.0.0.1"local port = "843&qu ...

  5. 深入理解spring中的各种注解(转)

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  6. Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看

    听说Cocos Studio非常久了,主要是由于骨骼动画.眼下看来Cocos2d-x播放动画的方式仅仅有2种: 第一种:是播放序列帧动画,即将动画的每一帧都载入进缓存里,须要播放时再使用Animati ...

  7. 2014在百度之星程序设计大赛 - 资格 第四个问题 Labyrinth

    小记:dfs暂停,不是决定性的 思维:由于只有三个方向向上和向下和向右,然后,我对待每列从左至右.然后,当在下一列的上一列的处理再加工每个值去获得正确的值,保存各坐标的数组格你可以得到最大值.每处理完 ...

  8. LR杂记 - loadrunner各项指标结果分析

    Transactions (用户事务分析) 用户事务分析是站在用户角度进行的基础性能分析. 1 . Transation Sunmmary (事务综述) 对事务进行综合分析是性能分析的第一步,通过分析 ...

  9. __weak如何实现目标值自己主动设置nil的

    在开始评论__weak机制之前,首先,一些床上用品 ARC 实现 苹果公司的官方介绍说,.ARC这是"内存管理由编译器"的,但事实上,只有编译器不能完全胜任,ARC另外还要看OC执 ...

  10. 使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)

    1.安装jenkins 2.浏览器访问jenkins主页 http://192.168.0.1:8080/,点击“系统管理” 3.在插件管理中,安装Publish Over SSH插件 4.在系统设置 ...