Objective-C之成魔之路【10-继承性】
郝萌主倾心贡献。尊重作者的劳动成果。请勿转载。
假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主。捐赠数额任意。重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X源代码下载:点我传送
当然,这一切要从根类開始:
没有父类的类,位于类层次结构的最顶层,称为根(Root)类。
NSObject是层次结构的最顶端(也就是它上面没有不论什么类),因此称为根类。
假设使用术语。能够将类称为子类和父类。相同,也能够将类称为子类和超类。
须要注意的是,要在子类中直接使用实例变量,必须先在接口部分声明。
在实现部分声明和合成(synthesize)的实例变量是私有的。子类中并不可以直接訪问。
须要明白定义或合成取值方法。才干訪问实例变量的值。
继承的概念作用于整个继承链。
一定要理解下面事实:类的每一个实例都拥有自己的实例变量。即使这些实例变量是继承来的。
找出正确的方法:
首先,检查该对象所属的类,以查看在该类中是否明白定义了一个具有指定名称的方法。
假设有,就使用这种方法。假设未定义,就检查它的父类。
假设父类中有定义,就使用这种方法,否者。继续找寻。
直到找到根类也没有发现不论什么方法。
通过继承来扩展:加入新方法
继承通经常使用于扩展一个类。
@class指令:
@class XYPoint;
或
#import "XYPoint.h"
使用@class指令提高了效率。由于编译器不须要引入和处理整个XYPoint.h文件(尽管它非常小)。
仅仅须要知道XYPoint是一个类名。
假设须要引用XYPoint类的方法(在实现部分中),@class指令是不够的,由于编译器须要很多其它的消息。
说的通俗点:仅仅引用了类就用@class不然就用#import。
在默认情况下。合成的设值方法仅仅是简单地复制对象指针,而不是对象本身。
你能够合成还有一种设值方法,而不是制作对象的副本。
于是他定义了类Person:
NSString* name;
int age;
NSDate birthDate;
}
-(NSString*) getInfo;
@end
NSObject {
NSString* name;
int age;
NSDate birthDate;
NSString* school;
}
-(NSString*) getInfo;
@end
。 却要反复定义其他全部的内容。
Objective-C提供了解决类似问题的机制, 那就是类的继承。
@interface Beauty:
Person {
NSString* school;
}
方法重写或者说是覆写方法:
不能通过继承删除或降低方法。但能够利用覆写来更改继承方法的定义。
新方法必须具有同样的返回类型,而且參数的数目与覆写的方法同样。
假设在不同的类中有名称同样的方法,则依据作为消息的接收者的类选择正确的方法。
为什么要创建子类?
有例如以下3个理由:
1)希望继承一个类的方法,或许增加一些新的方法和或实例变量。
2)希望创建一个类的特别的版本号。
3)希望通过覆写一个或多个方法来改变类的默认行为。
抽象类:
有时,创建类仅仅是为了更easy创建子类。
因此,这些类名为抽象(abstract)类,或等价地称为抽象超类(abstract superclasses)。
在该类中定义方法和实例变量,但不期望不论什么人从该类创建实例。
注意:
#import <Foundation/NSObject.h>
@interface Rectangle: NSObject {
int width;
int height;
}
-(Rectangle*) initWithWidth: (int) w height: (int) h;
-(void) setWidth: (int) w;
-(void) setHeight: (int) h;
-(void) setWidth: (int) w height: (int) h;
-(int) width;
-(int) height;
-(void) print;
@end
#import "Rectangle.h"
@implementation Rectangle
-(Rectangle*) initWithWidth: (int) w height: (int) h {
self = [super init];
if ( self ) {
[self setWidth: w height: h];
}
return self;
}
-(void) setWidth: (int) w {
width = w;
}
-(void) setHeight: (int) h {
height = h;
}
-(void) setWidth: (int) w height: (int) h {
width = w;
height = h;
}
-(int) width {
return width;
}
-(int) height {
return height;
}
-(void) print {
NSLog(@"width = %i, height = %i", width, height );
}
@end
#import "Rectangle.h" @interface Square: Rectangle
-(Square*) initWithSize: (int) s;
-(void) setSize: (int) s;
-(int) size;
@end
#import "Square.h" @implementation Square
-(Square*) initWithSize: (int) s {
self = [super init]; if ( self ) {
[self setSize: s];
} return self;
} -(void) setSize: (int) s {
width = s;
height = s;
} -(int) size {
return width;
} -(void) setWidth: (int) w {
[self setSize: w];
} -(void) setHeight: (int) h {
[self setSize: h];
}
@end
#import <Foundation/Foundation.h>
#import "Square.h"
#import "Rectangle.h" int main (int argc, const char * argv[]) { Rectangle *rec = [[Rectangle alloc] initWithWidth: 10 height: 20];
Square *sq = [[Square alloc] initWithSize: 15]; NSLog(@"Rectangle: " );
[rec print]; NSLog(@"Square: " );
[sq print]; [sq setWidth: 20];
NSLog(@"Square after change: " );
[sq print]; [rec release];
[sq release]; return 0;
}
width = 10, height = 20
Square:
width = 15, height = 15
Square after change:
width = 20, height = 20
Objective-C之成魔之路【10-继承性】的更多相关文章
- Objective-C之成魔之路【0-序章】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 C语言首创 ...
- Objective-C之成魔之路【5-选择结构】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...
- Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 构造方法 ...
- 《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
1. 简介 fixture是pytest的一个闪光点,pytest要精通怎么能不学习fixture呢?跟着我一起深入学习fixture吧.其实unittest和nose都支持fixture,但是pyt ...
- Objective-C之成魔之路【16-使用文件】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 语言的设计 ...
- Objective-C之成魔之路【13-预处理程序】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 预处理提供 ...
- Objective-C之成魔之路【19-归档】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 在Obje ...
- Objective-C之成魔之路【8-訪问成员变量和属性】
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 訪问成员变 ...
- Objective-C之成魔之路【7-类、对象和方法】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 Objec ...
随机推荐
- python基础学习笔记——迭代器
我们之前一直在用可迭代对象进行操作,那么到底什么是可迭代对象.我们现在就来讨论讨论可迭代对象.首先我们先回顾下我们 熟知的可迭代对象有哪些: str list tuple dic set ...
- [转]Python 之 使用 PIL 库做图像处理
Python 之 使用 PIL 库做图像处理 1. 简介. 图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴.PIL (Python Imaging ...
- Linux下dpkg的用法
转自:http://blog.csdn.net/fireblue1990/article/details/52627952 dpkg是一个Debian的一个命令行工具,它可以用来安装.删除.构建和管理 ...
- python ConfigParser 学习
[安装] ConfigParser 是解析配置文件的第三方库,需要安装 pip install ConfigParser [介绍] ConfigParser 是用来读取配置文件(可以是.conf, ...
- Ubuntu Flask安装与配置(待整理)
工作中开发需要用到python的flask框架,无奈网络上的资源很少,连基本的安装和配置都不全,在这做一下整理,方便以后用到. ———————————————————————————— 由于比较繁琐, ...
- 性能学习笔记之四--事务,思考时间,检查点,集合点和手写lr接口
一.事物,思考时间,检查点,集合点 1.事务 lr里面的事物是lr运行脚本的基础.lr里面 要测试的三个维度都以事物为单位,所以一定要有事物.事务的概念贯穿loadrunner的使用,比如我们说的响应 ...
- 简单介绍一下solr?
简单介绍一下solr? Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可 ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- Codeforces633G - Yash And Trees
Portal Description 给出一个\(n(n\leq10^5)\)个点的带点权树,以\(1\)为根:以及正整数\(m(m\leq10^3)\).进行\(q(q\leq10^5)\)次操作: ...
- Moya 与 RxSwift 使用
如在OC中使用AFNetworking一般,Swift我们用Alamofire来做网络库.而Moya在Alamofire的基础上又封装了一层: 1.关于moya moya 官方说moya有以下特性-_ ...