Objective C2.0学习(九 重载方法)

来源:互联网 发布:知乎 电脑耳机 编辑:程序博客网 时间:2024/06/03 05:43
方法的重载:
不能通过继承删除或者减少方法,只有利用重载来更改继承方法的定义。
两个类:ClassA与ClassB。将定要为ClassB编写自己的initVar方法。ClassA类里已经定义了initVar,ClassA继承了该方法,此处新建一个同名的方法来替代继承的方法,新方法必需具有相同的返回类型,想通的参数以及数目。

ClassA.h
Overriding Methods
#import <Foundation/Foundation.h>
@interface ClassA: NSObject
{
int x;
}
-(void) initVar;
@end

ClassA.m
@implementation ClassA
-(void) initVar
{
x = 100;
}
@end

@interface ClassB: ClassA
-(void) initVar;
-(void) printVar;
@end

@implementation ClassB
-(void) initVar 
{
x = 200;
}

ClassB *b = [[ClassB alloc] init];
[b initVar]; 导致使用定义在ClassB中的initVar方法,而不是使用ClassA中所定义的方法
Objective <wbr>C2.0学习(九 <wbr>重载方法)

ClassA *a = [[ClassA alloc] init];
ClassB *b = [[ClassB alloc] init];
[a initVar];
[a printVar]; 错误   ClassA里面没有printVar方法(ClassA declaration and definition)
[b initVar];
[b printVar];
[a release];
[b release];

(有些不是很明白,需要以后更多注意)
重载dealloc方法和关键字super
[[myRect origin] release]所以不必担心释放所遇单独的类成员,此处只释放myRect的origin

当然,也可以利用关键字super,他引用了消息接收者的父类。可以向super传递消息来执行重载方法。
[super release];释放父类

总体来说,该章节的类,应该被叫做抽象类,子类重写父类的方法