上一章笔者介绍了一下在objecsive-C里面的类的基本构造和定义以及声明的方法。我们知道在面向对象的程序里面,有一个很重要的需求就是
代码的重复使用,代码的重复使用的重要方法之一就是继承。我们在这一章里面,将要仔细的分析一下继承的概念以及使用的方法。有过其他面向对象语言的同学,
对这一章的内容应该不会感到陌生。
4.1,本章的程序的执行结果
在本章里面,我们将要重复使用第3章的部分代码。我们在第3章构筑了一个叫做Cattle的类,我们在这一章里面需要使用Cattle类,然后
基于Cattle类,我们需要构筑一个子类,叫做Bull类。
Bull类里面,我们追加了一个实例变量,名字叫做skinColor,我们也将要追加2个实例方法,分别getSkinColor还有
setSkinColor。我们然后需要更改一下我们的main函数,然后在main函数里面让我们的Bull做一下重要讲话。第4章程序的执行结果如图
4-1所示:
图4-1,本章程序的执行结果
4.2,实现步骤
第一步,按照我们在第二章所述的方法,新建一个项目,项目的名字叫做04-Hello Inheritance。如果你是第一次看本篇
文章,请到这里参看第二章的内容。
第二步,把
鼠标移动到项目浏览器上面的“Source”上面,然后在弹出的菜单上面选择“Add”,然后在子菜单里面选择“Exsiting Files” ,如图4-2所示
图4-2,向项目追加文件
第三步,在文件选择菜单里面,选择第3章的项目文件夹“03-Hello Class”,打开这个文件夹之后,用鼠标和
苹果电脑的COMMAND键,选泽文件“Cattle.h”和“Cattle.m”,然后按下“Add”按钮,如图4-3所示。
图4-3,选择文件
第四步,在追加文件的选项对话框里面,让“Copy items into destination group's folder(if
needed)”
的单选框变为被选择的状态。这样就保证了我们在第三步里面选择的文件被拷贝到了本章的项目里面,可以避免我们不小心更改“Cattle.h”和
“Cattle.m”对已经生效的第3章程序产生影响,虽然我们在本章里面不更改这2个代码。
第五步,把鼠标移动到项目浏览器上面的“Source”上面,然后在弹出的菜单上面选择“Add”,然后在子菜单里面选择“New
Files”,然后在新建文件对话框的左侧选择“Cocoa Touch Classes”,然后在右侧窗口选择“NSobjecs
subclass”,选择“Next”,在“New File”对话框里面的“File
Name”栏内输入“Bull.m”。在这里笔者没有给出图例,在这里新建文件的步骤和第3章的第二步到第四步相同,只是文件名字不一样。第一次看到本篇
文章的同学可以参照第3章。
第六步,打开Bull.h做出如下修改,并且保存。
#import
#import "Cattle.h"
@interface Bull : Cattle {
NSString *skinColor;
}
- (void)saySomething;
- (NSString*) getSkinColor;
- (void) setSkinColor:(NSString *) color;
@end
第七步,打开Bull.m做出如下修改,并且保存
#import "Bull.h"
@implementation Bull
-(void) saySomething
{
NSLog(@"Hello, I am a %@ bull, I have %d legs.", [self getSkinColor],legsCount);
}
-(NSString*) getSkinColor
{
return skinColor;
}
- (void) setSkinColor:(NSString *) color
{
skinColor = color;
}
@end
第八步,打开04-Hello Inheritance.m文件,做出如下修改,并且保存
#import
#import "Cattle.h"
#import "Bull.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id cattle = [Cattle new];
[cattle setLegsCount:4];
[cattle saySomething];
id redBull = [Bull new];
[redBull setLegsCount:4];
[redBull setSkinColor:@"red"];
[redBull saySomething];
Bull *blackBull = [Bull new];
[blackBull setLegsCount:4];
[blackBull setSkinColor:@"black"];
[blackBull saySomething];
[pool drain];
return 0;
}
第九步,选择屏幕上方菜单里面的“Run”,然后选择“Console”,打开了Console对话框之后,选择对话框上部中央的“Build
and Go”,如果不出什么意外的话,那么应该出现入图4-1所示的结果。如果出现了什么意外导致错误的话,那么请仔细检查一下你的代码。