OC语言学习 (六) 继承、多态,构造方法,description方法
声明父类Animal继承自NSObject
Animal.h
#ifndef oc_Animal_h #define oc_Animal_h @interface Animal : NSObject { @public int weight; } - (void)eat; //重写默认构造方法 - (id) init; //自定义构造方法 - (id) initWithWeight:(int)newWeight; @end #endif
#import <Foundation/Foundation.h> #import "Animal.h" @implementation Animal - (void)eat { NSLog(@"体重:%d", weight); } //id 是万能指针,可指向任何对象, 不要再加上* //重写默认构造方法init 构造方法:初始化对象 - (id) init { if (self = [super init]) { //!=nil 先初始化父对象,再赋给self, 再初始化自有成员, 最后return self weight = 20; } return self; } //自定义构造方法 - (id) initWithWeight:(int)newWeight { if (self = [super init]) { self->weight = newWeight; } return self; } @end
子类Dog,继承自Animal
Dog.h
#ifndef oc_Dog_h #define oc_Dog_h #import "Animal.h" @interface Dog : Animal { @public int speed; } @property int speed; //自动声明 get set方法 - (void)run; //id 是万能指针,可指向任何对象, 不要再加上* //重写init 构造方法:初始化对象 - (id) init; //重写 NSObject的init - (id) initWithWeightSpeed:(int)newWeight:(int)newSpeed; - (NSString*)description; //对象描述 //重写 NSObject的description + (NSString*)description; //类对象描述 @end #endif
Dog.m
#import <Foundation/Foundation.h> #import "Dog.h" @implementation Dog @synthesize speed; //编译器自动生成get、set的实现方法 - (void)run { NSLog(@"跑-速度:%d", speed); } //id 是万能指针,可指向任何对象, 不要再加上* //重写init 构造方法:初始化对象 - (id) init { if (self = [super init]) { //!=nil speed = 15; //self->speed = 15; } return self; } //自定义构造方法,调用父类自定义构造 - (id) initWithWeightSpeed:(int)newWeight:(int)newSpeed { if (self = [super initWithWeight:newWeight]) { speed = newSpeed; } return self; } - (NSString*)description //对象描述 //重写 NSObject的description { return [NSString stringWithFormat:@"weight=%d,speed=%d", weight, speed]; } + (NSString*)description //类对象描述 { return [NSString stringWithUTF8String:"<Dog : Animal>"]; } @end
main.m
#import "Animal.h" #import "Dog.h" int main() { Animal* animal = [[Animal alloc] init]; //默认构造 [animal eat]; animal = [[Animal alloc] initWithWeight:17]; //自定义构造 [animal eat]; Dog* adog = [[Dog alloc] init];//默认构造 [adog run]; [adog eat]; adog = [[Dog alloc] initWithWeight:16];//父类的自定义构造 [adog eat]; adog = [[Dog alloc] initWithWeightSpeed:16:13];//Dog自身的 自定义构造 [adog run]; [adog eat]; //多态创建对象 Animal* xdog = [[Dog alloc] initWithWeightSpeed:33 :55]; [xdog eat]; Dog* mdog = xdog; [mdog run]; //description方法调用 NSLog([mdog description]); //调用对象方法 NSLog(@"%@", mdog);//输出对象%@ 默认调用description对象方法 NSLog([Dog description]); //调用类方法 NSLog([[Dog class] description]); //默认调用 description类方法 这里省略了@"%@"的format return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。