obj-c编程04:类的继承
这第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:类的继承的更多相关文章
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件
面向对象编程(OOP)术语: class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 ...
- Python 进阶_OOP 面向对象编程_类和继承
目录 目录 类 最简单的类 类方法 构造器 __init__ 创建一个类 实例化一个对象 调用实例的方法和属性 创建子类 使用 super 来调用父类的构造器 实例化子类对象 调用子类的属性和方法 类 ...
- 3、二、c# 面向对像编程。类,结构、C# 数据类型(引用类型、值 类型、指针类型)、ref参数与out参数、方法的重载、静态类型与静态成员、继承与多态、委托与事件
一.类 定义类使用class关键字. <access specifier> class class_name { // member variables 成员变量 <access s ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- Objective-C编程 — 类和继承
讲述面向对象中的一个重要概念——继承,使用继承 可以方便地在已有类的基础上进行扩展,定义一个具有父 类全部功能的新类. 父类和子类 我们在定义一个新类的时候,经常会遇到要定义的新类是某个类的扩展或者是 ...
- 【PHP面向对象(OOP)编程入门教程】11.类的继承
继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承. 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或 ...
- JavaScript 面向对象的编程(三) 类的继承
定义父类和子类的继承关系 //声明父类 function SuperClass(){ this.superValue = true; } //为父类添加共有方法 SuperClass.prototyp ...
随机推荐
- [Windows Phone] 实作不同的地图显示模式
原文:[Windows Phone] 实作不同的地图显示模式 前言 本文章主要示范如何让地图有不同的模式产生,例如平面图.地形图.鸟瞰图.鸟瞰图含街道等. 这部分主要是调整 Map.Cartograp ...
- 最近跑hadoop遇到的一些问题
一. [#|2013-09-16T18:19:02.663+0800|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterpris ...
- 【程序猿助手】Emacs,最强的编辑器,之间的不
wx_fmt=png" alt="" style="max-width:100%; height:auto!important"> 内容简单 ...
- [原创] 使用rpi + crontab + git 定时向bitbucket 推送 照片
#前提条件,你得有一个bitbucket的帐户 1.定时启动脚本代码 使用的是crontab Cronfile 内容如下: 此文件的意思是,每隔10分钟,就运行一次 /home/pi/Rpi_uplo ...
- Mono for Andriod学习与实践(1)— 初体验
对于Andriod的开发者来说,相信Java语言是第一选择,可是对于.Net开发者来说,要想利用C#在Andriod平台上开发,Mono提供了相应的开发平台来实现,Mono for Andriod就是 ...
- poj 2288 Islands and Bridges
题意: 给你一个双向连通图,求 获得权值最大 的 哈密顿通路的 权值 和 这个权值对应的数目: 其中权值计算方法是 列如 ABCD 权值是a+b+c+d+ab+bc+cd 如果 A,B,C 和B ...
- 【Linux探索之旅】第二部分第四课:文件操纵,鼓掌之中
内容简介 1.第二部分第四课:文件操纵,鼓掌之中 2.第二部分第五课预告:用户和权限 文件操纵,鼓掌之中 既然上一课我们学习了Linux中的文件组织方式,那么现在就该是玩弄,啊不,是操纵它们的时候了. ...
- 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...
- 构建安全的Xml Web Service系列之wse之错误代码详解
原文:构建安全的Xml Web Service系列之wse之错误代码详解 WSE3.0现在还没有中文版的可以下载,使用英文版的过程中,难免会遇到各种各样的错误,而面对一堆毫无头绪的错误异常,常常会感到 ...
- uva--165(邮资问题,dp)
题意: 某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票. 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1.2.3,--n. n是能达到的最大面值之和 ...