这次,我们讲解在Objective-C中如何进行类的继承以及方法的重载。按照惯例,我们还是先拿出一个重载的小例子,以例子为基础展开讲解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#import <Foundation/Foundation.h>
@interface
ClassA:
NSObject
//ClassA类型继承NSObject类型
{
int
x;
//声明变量成员
}
-(
void
) initVar;
//声明初始化方法
@end
@implementation
ClassA
//定义ClassA
-(
void
) initVar
//定义初始化方法
{
x = 100;
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@interface
ClassB:ClassA
//ClassB类型继承ClassA类型
-(
void
) initVar;
//声明初始化方法,此方法重载ClassA中的同名方法
-(
void
) printVar;
//声明打印变量方法
@end
@implementation
ClassB
//定义ClassB
-(
void
)initVar
//定义初始化方法
{
x = 200;
}
-(
void
) printVar
//定义打印变量方法
{
NSLog
(@
"x = %i"
, x);
}
|
1
2
3
4
5
6
7
8
9
10
|
int
main(
int
argc,
char
*argv[])
{
NSAutoreleasePool
*pool = [[
NSAutoreleasePool
alloc] init];
ClassB *b = [[ClassB alloc]init];
//定义ClassB类型实例
[b initVar];
//调用b对象的initVar方法
[b printVar];
//调用b对象的printVar方法
[b release];
//释放b对象占用的内存空间
[pool drain];
return
0;
}
|
输出:
1
|
x = 200;
|
接触过C++的同学看过上面的小例子,立刻就明白了,其实Objective-C的继承和C++继承的语法很类似,差别很小,都是在声明类型的时候多加一句代码,如ClassB类型继承ClassA类型,即在定义接口文件时编写:@interface ClassB:ClassA,即可完成继承。顺便提一句,Objective-C不能直接进行多继承,需要辅助协议(协议本质上类似与C#语言中的接口。关于协议的具体内容,将会在后面和分类概念一起介绍)实现多继承。
Objective-C中的方法重载也很简单,只要子类中的方法名称和父类的方法名称一样,即可自动对父类的同名方法进行重载,不用添加任何关键字。