#import <Foundation/Foundation.h>

#import "Person.h"

#import "Student.h"

 

// 构造方法:用来初始化对象的方法,是个对象方法,-开头

// 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

/*

 重写构造方法的注意点

1.先调用父类的构造方法([super init])

2.再进行子类内部成员变量的初始化

 */

int main()

{

    // Person *p = [Person new];

    /*

     完整地创建一个可用的对象

     1.分配存储空间  +alloc

     2.初始化 -init

     */

    

    // 1.调用+alloc分配存储空间

    // Person *p1 = [Person alloc];

    // 2.调用-init进行初始化

    // Person *p2 = [p1 init];

    

//    // 调用-init进行初始化

//    Person *p3 = [Person new];

//    

//    

//    // 每个Person对象创建出来,他的_age都是10

//    

    Person *p4 = [[Person alloc] init];

   Student *stu = [[Student alloc] init];

    NSLog(@"------");

    return 0;

}

#import <Foundation/Foundation.h>

 

@interface Person : NSObject

@property int age;

@end

#import "Person.h"

 

@implementation Person

 

 

// 重写-init方法

//- (id)init

//{

//    // 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性

//    self = [super init]; // 当前对象 self

//    

//    

//    // 2.如果对象初始化成功,才有必要进行接下来的初始化

//    if (self != nil)

//    { // 初始化成功

//        _age = 10;

//    }

//    

//    // 3.返回一个已经初始化完毕的对象

//    return self;

//}

 

- (id)init

{

    if ( self = [super init] )

    { // 初始化成功

        _age = 10;

    }

    

    // 3.返回一个已经初始化完毕的对象

    return self;

}

 

@end

 

#import "Person.h"

 

@interface Student : Person

@property int no;

@end

 

#import "Student.h"

 

@implementation Student

 

// 学生对象初始化完毕后,年龄就是10,学号就是1

 

- (id)init

{

    if ( self = [super init] )

    {

        _no = 1;

    }

    return self;

}

 

@end