方法的重载:
不能通过继承删除或者减少方法,只有利用重载来更改继承方法的定义。
两个类: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中所定义的方法
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];释放父类
总体来说,该章节的类,应该被叫做
抽象类,子类重写父类的方法