版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章类1本章提要2继承方法重写(覆盖)使用super抽象类动态方法调用(多态)访问控制Catergory(类别)3继承NSObject是大多数类的根类所以很多类在接口文件中这样申明@interface
ClassName
:
NSObjectOC和JAVA一样不支持多重继承,如果要实现多重继承使用@protocol继承语法@interfaceClassB
:
ClassA4方法重写若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数,则新方法将覆盖原有的方法5方法重写ClassA.h代码:#import
<Foundation/Foundation.h>@interface
ClassA
:
NSObject
{int
x;}-(void)
setX;@endClassA.m的代码:
#import
"ClassA.h"@implementation
ClassA-(void)setX{x
=
10;}@end6方法重写ClassB.h中定义一个方法也叫setX#import<Foundation/Foundation.h>#import"ClassA.h"@interface
ClassB
:ClassA-(void)
printX;-(void)
setX;@end在ClassB.m中添加这个方法的实现。#import"ClassB.h"@implementation
ClassB-(void)printX{NSLog(@"%i",x);}-(void)setX{x
=11;}@end7方法重写测试类中调用该方法。#import
"ClassA.h"#import
"ClassB.h"int
main
(int
argc,
const
char
*
argv[
])
{@autoreleasepool{ClassB
*classB
=
[
[
ClassB
alloc
]
init
];[classB
setX];[classB
printX];[classB
release];}return
0;}8方法重载重载:类中创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义OC
不是严格的函数重载方法名一定要相同方法的参数个数必须不同方法的返回类型、修饰符可以相同,也可以不同。方法重载910使用supersuper关键字表示父类可以使用super访问父类中被子类隐藏的或重写的方法例如:[super
setX]; //调用父类的setX方法11使用superClassA.h代码:#import
<Foundation/Foundation.h>@interface
ClassA
:
NSObject
{int
x;}-(void)
setX;@endClassA.m的代码:
#import
"ClassA.h"@implementation
ClassA-(void)setX{x
=
10;}@end12使用superClassB.h#import<Foundation/Foundation.h>#import"ClassA.h"@interface
ClassB
:ClassA-(void)
printX;-(void)
setX;@endClassB.m#import"ClassB.h"@implementation
ClassB-(void)printX{NSLog(@"%i",x);}-(void)setX{x
=11;[supersetX];}@end13使用super测试类中调用该方法。#import
"ClassA.h"#import
"ClassB.h"int
main
(int
argc,
const
char
*
argv[])
{@autoreleasepool{ClassB
*classB
=
[[ClassB
alloc]init];[classB
setX];[classB
printX];[classB
release];}return
0;}14抽象类抽象类不能被实例化,单独使用也没有任何意义,完全是为了被继承抽象类定义的目的:为了别的类能从它们那里继承,这些抽象的方法和属性能够被很多不同的子类使用,从而保证子类继承一个相同的定义15抽象类NSNumber
是一个关于数字的抽象类#import
<Foundation/NSObject.h>#import
<Foundation/NSAutoreleasePool.h>#import
<Foundation/NSValue.h>#import
<Foundation/NSString.h>int
main
(int
argc,
char
*argv[]){@autoreleasepool{NSNumber
*myNumber,
*floatNumber,
*intNumber;NSIntegermyInt;//
integer
valueintNumber
=
[NSNumber
numberWithInteger:
238];myInt
=
[intNumber
integerValue];NSLog
(@”%li”,
(long)
myInt);//
long
valuemyNumber
=
[NSNumber
numberWithLong:
0xbadcef];NSLog
(@”%lx”,
[myNumber
longValue]);//
float
valuefloatNumber
=
[NSNumber
numberWithFloat:
2.08];NSLog
(@”%g”,
[floatNumber
floatValue]);}}动态方法调用通过id数据类型实现,它可以用来存储任何类的对象,实现多态Test1.h的代码如下:
#import
<Cocoa/Cocoa.h>@interface
Test1
:
NSObject
{}-(void)
print;@endTest1.m的代码如下:
#import"Test1.h"@implementation
Test1-(void)print{NSLog(@"我是test1");}@end1617动态方法调用Test.h的代码如下:#import
<Cocoa/Cocoa.h>@interface
Test1
:
NSObject
{}-(void)
print;@endTest.m的代码如下:
#import"Test1.h"@implementation
Test1-(void)print{NSLog(@"我是test");}@end18动态方法调用ClassTest.m的代码如下:#import
<Foundation/Foundation.h>#import
"Test.h"#import
"Test1.h"int
main
(int
argc,
const
char
*
argv[])
{@autoreleasepool{id
idTest;Test
*test
=
[[Testalloc
]init
];Test1
*test1
=
[[Test1alloc
]
init
];idTest
=
test;[idTest
print];idTest
=test1;[idTest
print];[test
release];[test1
release];}return
0;}19访问控制@protected:用此指令修饰的实例变量可以被该类和任何子类定义的方法直接访问,这是默认的情况。@private:用此指令修饰的实例变量可被该类的方法直接访问,但是不能被子类中定义的方法直接访问。@public:用此指令修饰的实例变量可以被该类中的方法直接访问,也可以被其他类定义的方法直接访问,读者应该避免使用这个作用域。其他类应该使用getter/setter方法来访问或设置其他类上的实例变量,否则就破坏了面向对象的封装性。20访问控制ClassA.h:#import
<Foundation/Foundation.h>@interface
ClassA
:
NSObject
{@publicint
x;@protectedfloat
y;@privatedouble
z;}@endClassA.m的代码如下:
#import"ClassA.h"@implementation
ClassA@end21访问控制ClassB.h:#import
<Foundation/Foundation.h>#import
"ClassA.h"@interface
ClassB
:ClassA-(void)print;@endClassB.m:#import
"ClassB.h"@implementation
ClassB-(void)print{y=2.0f;
//y在ClassA中定义,属性为@protectedNSLog(@"%f",y);}@end22访问控制TestClass.m测试类,测试上面代码的正确性:
#import"ClassA.h"#import
"ClassB.h"int
main
(int
argc,
const
char
*
argv[])
{@autoreleasepool{ClassA
*classA
=[[ClassA
alloc]init];ClassB*classB
=[[ClassBalloc]init];classA->x=1;
//->表示获取x的值,不赞成使用,破坏封装性
NSLog(@"%i",classA->x);[classB
print];classA->z
=
3.0;NSLog(@"%e",classA->z);[classA
release];[classB
release];}return
0;}23Category(类别)作用:为已经存在的类增加方法,而不需要增加一个子类标准的语法格式如下:#import"类名.h"@interface
类名(类别名)//新方法的声明@end实现部分代码:#import"类名类别名.h"@implementation
类名(类别名)//新方法的实现@end24Category(类别)例如:在NSString上增加一个方法来判断它是否是一个URL#import
……@interface
NSString
(Utilities)(BOOL)isURL;@end实现:#import
"NSStringUtilities.h"@implementation
NSString
(Utilities)(BOOL)
isURL{if
(
[self
hasPrefix:@“http://”]
)//NSString自带方法,检查字符串是否以某字符串开头
return
YES;elsereturn
NO;}@end25Category(类别)调用:#import
<Foundation/Foundation.h>int
main
(int
argc,
const
char
*
argv[])
{@autoreleasepool{NSString
*string1
=
@"
";NSString
*string2
=
@"Pixar";if
([string1
isURL])
{NSLog(@"string1
is
a
URL");}else
{NSLog(@"string1
is
not
a
URL");}if
([string2
isURL])
{NSLog(@"string2
is
a
URL");}
else
{NSLog(@"string2
is
not
a
URL");}}return
0;26Category(类别)注意:category并不能为类声明新的实例变量,它只包含方法在类作用域中的所有实例变量(甚至@private
类型的),都能被这些category方法所访问。一个类可以添加多个category,但每个category名必须不同,而且每个category都必须声明并实现一套不同的方法category来修改一个类的时候,它对应用程序里的这个类的所有对象都起作用。跟子类不一样,category
不能增加成员变量。还可以用category
来重写类原先的存在的方法(不推荐)27@class
指令A类是引用类,B类是被引用类,通常引用一个类有两种办法:#import方式引入@class引入用法:class1.h:#import
<Foundation/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高职(工程造价)工程招投标与合同管理综合测试题及答案
- 武术散打训练:解锁女大学生柔韧素质与积极心境的密码
- 2026年安阳疾控中心考试试题及答案
- 正交频分复用(OFDM)系统中信道估计技术的深度剖析与优化策略研究
- 欧美节能政策剖析与对我国的启示:基于多维度视角的研究
- 主题12 科技前沿 (Frontiers of Science and Technology)- 2026年初中英语中考主题作文满分训练
- 欧瑞莲(中国)公司市场营销策略优化路径探究:基于本土市场的深度剖析与创新实践
- 次贷危机背景下我国公司债券流动性溢价的深度剖析与策略研究
- 模拟酸雨胁迫下髯毛箬竹的生理响应与外源一氧化氮调控机制解析
- 模拟增温情境下青藏高原多年冻土区草地生态系统碳平衡的响应与机制研究
- 2025-2026学年天津市滨海新区塘沽第六中学七年级下学期4月期中数学试题(含答案)
- 公司财务工作制度范本
- 【苏科版】小学二年级心理健康全一册同步教学课件第6课 我能接受批评(课件)
- 电力安全生产标准化达标评级管理办法
- APQC跨行业流程分类框架 (8.0 版)( 中文版-2026年4月)
- 道路运输领域汛期暑期安全工作方案
- 2026介护特定技能考试高频考题题库带答案解析
- 广东省深圳市2026年中考英语模拟试卷四套附答案
- 建筑工地 宿舍管理制度
- 2026年南阳工艺美术职业学院单招职业倾向性测试题库附答案详解(黄金题型)
- 班子主动担当作为意识不够强整改措施
评论
0/150
提交评论