父类:Animal.h
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
//实例变量
NSString *_type; //种类
NSString *_color;
}
-(instancetype)initWithType:(NSString*)type
color:(NSString*)color;
//便利构造器
//便利构造器是以类名开头
//是 + 类方法
//返回值类型是本类类型
//便利构造器是和初始化方法配套使用的
+(Animal *)animalWithType:(NSString *)type color:(NSString *)color;
//方法
-(void)cry;
-(NSString*)type;
-(NSString*)color;
-(void)setType:(NSString*)type;
-(void)setColor:(NSString*)color;
@end
animal.m
#import "Animal.h"
@implementation Animal
-(instancetype)initWithType:(NSString*)type
color:(NSString*)color{
self=[super init];
//如果父类初始化成功,返回首地址.开始子类实例变量的初始化
//如果失败就直接返回,不初始化子类的实例变量
if (self) {
_color=color;
_type=type;
}
return self;
}
+(Animal *)animalWithType:(NSString *)type color:(NSString *)color{
Animal *ani=[[Animal alloc] initWithType:type color:color];
return ani;
}
-(void)cry{
NSLog(@"aoao嗷嗷");
}
-(NSString*)type{
return _type;
}
-(NSString*)color{
return _color;
}
-(void)setType:(NSString*)type{
_type=type;
}
-(void)setColor:(NSString*)color{
_color=color;
}
@end
子类 Dog.h
#import "Animal.h"
@interface Dog : Animal
{
NSInteger _legs;
}
-(instancetype)initWithType:(NSString *)type color:(NSString *)color legs:(NSInteger)legs;
+(Dog *)dogWithType:(NSString *)type color:(NSString*)color legs:(NSInteger)legs;
@end
Dog.m
#import "Dog.h"
@implementation Dog
-(instancetype)initWithType:(NSString *)type color:(NSString *)color legs:(NSInteger)legs{
//super调用的时父类的初始化方法
self=[super initWithType:type color:color];
if (self) {
_legs=legs;
}
return self;
}
+(Dog *)dogWithType:(NSString *)type color:(NSString*)color legs:(NSInteger)legs{
Dog *d=[[Dog alloc] initWithType:type color:color legs:legs];
return d;
}
//重写
-(void)cry{
//循环调用
//在自己的方法中,不可以使用seif进行调用
//否则进入死循环
//在其他方法中可以使用self进行调用
[super cry];
NSLog(@"wamgwamg");
// [self cry];
}
@end
main函数里
Animal *an1=[Animal animalWithType:@"两栖" color:@"红白"];
[an1 cry];
// Dog *d=[[Dog alloc] initWithType:@"牧羊犬" color:@"白色" legs:4];
Dog *d=[Dog dogWithType:@"牧羊犬" color:@"白色" legs:5];
NSLog(@"%@:%@",[d type],[d color]);
[d cry];