main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] initWithName:@"jack"];
Person *p1 = [[Person alloc] initWithName:@"rose" andAge: 20];
Student *s = [[Student alloc] initWithNo:1];
Student *s1 = [[Student alloc] initWithName: @"jim" andAge:20 andNo:10];
NSLog(@"-----%@",[s1 name]);
}
return 0;
}
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@property NSString *name;
/*
自定义构造方法
1. 一定是对象方法,一定以 - 开头
2. 返回值一般是instancetype类型
3. 方法名一半以init开头
*/
- (instancetype)initWithName: (NSString *) name;
- (instancetype)initWithAge: (int) age;
- (instancetype)initWithName: (NSString *) name andAge: (int)age;
@end
Person.m
#import "Person.h"
@implementation Person
- (instancetype)init
{
if( self = [super init] )
{
_name = @"jack";
}
return self;
}
- (instancetype)initWithName:(NSString *)name
{
if( self = [super init] )
{
_name = name;
}
return self;
}
- (instancetype)initWithAge:(int)age
{
if( self = [super init] )
{
_age = age;
}
return self;
}
- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
if( self = [super init] )
{
_name = name;
_age = age;
}
return self;
}
@end
Student.h
#import "Person.h"
@interface Student : Person
@property int no;
- (instancetype)initWithNo: (int)no;
- (instancetype)initWithName: (NSString *)name andAge: (int)age andNo: (int)no;
@end
Student.m
#import "Student.h"
@implementation Student
- (instancetype)initWithNo:(int)no
{
if( self = [super init] )
{
_no = no;
}
return self;
}
//- (instancetype)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
//{
// if( self = [super init] )
// {
// _no = no;
// self.age = age;
// self.name = name;
// //[self setName:name];
// //[self setAge:20];
// }
//
// return self;
//}
- (instancetype)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
// 将name、age传递到父类方法中进行初始化
if(self = [super initWithName:name andAge:age] )
{
_no = no;
}
return self;
}
@end